Vra

Hoe skakel ek die volgende 2 vrae in 1 navraag

$sql    = "SELECT level FROM skills WHERE id = $id LIMIT 1;";
$result = $db->sql_query($sql);
$level  = (int) $db->sql_fetchfield('level');
$db->sql_freeresult($result);

++$level;

$sql    = "UPDATE skills SET level = $level WHERE id = $id;";
$result = $db->sql_query($sql);
$db->sql_freeresult($result);

Ek gebruik dit in 'n phpBB mod maar die kern is dat ek gryp die vlak, voeg een om dit dan te werk, blyk dit dat dit baie makliker en vinniger as ek dit kon doen as een navraag wil wees.

Edit:. $id reeds gedwing om 'n heelgetal wees, dus geen ontsnapping is hierdie tyd wat nodig is

Was dit nuttig?

Oplossing

Ek kry downmodded vir hierdie?

$sql = "UPDATE skills SET level = level+1 WHERE id = $id";
$result = $db->sql_query($sql);
$db->sql_freeresult($result);

In spesifieke geval Teifion se die phpBB DDL lys daardie spesifieke veld as NIE NULL, so daar is geen gevaar van die verhoog NULL.

In die algemene geval, jy moet nie NULL gebruik om verteenwoordig nul. Die verhoog NULL moet gee 'n antwoord van NULL. As jy die soort van verkeerde ontwikkelaar wat NULL dink = 0 is, stap weg van die sleutelbord en 'n ander tydverdryf, jy net om die lewe moeilik vir die res van ons. Natuurlik, dit is die rekenaar bedryf en wie is ons om te sê jy is verkeerd? As jy nie verkeerd, gebruik

$sql = "UPDATE skills SET level = COALESCE(level,0)+1 WHERE id = $id";

... maar laat ons eerlik wees: jy is verkeerd. As almal begin by vlak 0, dan is jou DDL moet die volgende insluit

level INT DEFAULT '0' NOT NULL

in geval die programmeerders vergeet om dit te stel wanneer hulle 'n rekord te skep. Indien nie almal begin op vlak 0, dan slaan die verstek en dwing die programmeerder om 'n waarde te lewer op die skepping. As sommige mense is verby vlakke, vir wie 'n vlak is 'n sinlose ding, dan die toevoeging van een tot hul vlak ewe het geen betekenis. In daardie geval, val die NIE NULL van die DDL.

Ander wenke

Op hierdie manier:

UPDATE skills
SET level = level + 1
WHERE id = $id

Met BOB en bereid navraag:

$query = $db->prepare("UPDATE skills SET level = level + 1 WHERE id = :id")
$query->bindValue(":id", $id);
$result = $query->execute();

$ sql = "UPDATE vaardighede SET vlak = vlak + 1 WAAR id = $ id"

Ek hoop net jy behoorlik reinig $ id elders in jou kode!

Probeer hierdie

UPDATE skills SET level = level + 1 WHERE id = $id

Hoe gaan dit:

UPDATE skills SET level = level + 1 WHERE id = $id;

Mat: Dit is wat geplak in die vraag. Dit is nog nie geredigeer, so ek skryf dat 'n fout in Afprijzingsmanager. Maar, snaaks genoeg, ek het opgemerk.

Ook: ja, mysql_escape_string()

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top