sql_query($sql); $level = (int)"> sql_query($sql); $level = (int)"> sql_query($sql); $level = (int)" />

Adăugați 1 la un câmp

Cum pot transforma următoarele două interogări într-o interogare

$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);

Eu o folosesc într-un mod phpBB, dar esența este că am apucat nivelul, adăugați unul la acesta, apoi actualizați, se pare că ar fi mult mai ușor și mai rapid dacă aș putea face acest lucru ca o singură interogare.

Modificați: $ id a fost deja forțat să fie un număr întreg, astfel că nu este nevoie de escaping de data aceasta.

0
fr hi bn

7 răspunsuri

$ sql = "Aptitudini UPDATE SET nivel = nivel + 1 WHERE id = $ id";

Sper doar că dezinfectați în mod corespunzător id-ul în altă parte a codului dvs.!

0
adăugat
mai ales fără citate, cineva nu trebuie să scape nici măcar din ultimul citat cu SQL Injection $ id = "'null" sau DELETE FROM skills "; haha
adăugat autor Josh Bedo, sursa

incearca asta

UPDATE skills SET level = level + 1 WHERE id = $id
0
adăugat

Pe aici:

UPDATE skills
SET level = level + 1
WHERE id = $id
0
adăugat

Mă dau jos pentru asta?

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

În cazul specific al lui Teifion, phpBB DDL listează acest câmp ca NU NULL, deci nu există pericolul creșterii NULL.

În general, nu trebuie să utilizați NULL pentru a reprezenta zero. Creșterea NULL trebuie să dea un răspuns NULL. Dacă sunteți un fel de dezvoltator greșit care crede NULL = 0, ieșiți departe de tastatură și găsiți o altă distracție, faceți doar greu pentru ceilalți. Bineînțeles, aceasta este industria de calculatoare și cine suntem să spunem că te înșeli? Dacă nu greșești, folosește

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

... dar să recunoaștem: greșești. Dacă toată lumea începe la nivelul 0, atunci DDL ar trebui să includă

level INT DEFAULT '0' NOT NULL

în cazul în care programatorii uită să-l setați când creează o înregistrare. Dacă nu toată lumea pornește la nivelul 0, apoi sări peste DEFAULT și forțează programatorul să furnizeze o valoare la crearea. Dacă unii oameni sunt dincolo de nivele, pentru care un nivel este un lucru lipsit de sens, atunci adăugarea la nivelul lor nu are nici un sens. În acest caz, renunțați la NOT NULL din DDL.

0
adăugat
Am o problemă în cazul în care "nivelul" este nul, nu va crește.
adăugat autor MaurerPower, sursa

Mat: Asta e pasiunea din întrebare. Nu a fost editat, așa că am atribuit asta unui bug în Markdown. Dar, ciudat, am observat.

De asemenea: da, mysql_escape_string() !

0
adăugat

Ce zici:

UPDATE skills SET level = level + 1 WHERE id = $id;
0
adăugat

Cu interogare DOP și interogare pregătită:

$query = $db->prepare("UPDATE skills SET level = level + 1 WHERE id = :id")
$query->bindValue(":id", $id);
$result = $query->execute();
0
adăugat
PHP România, Moldova
PHP România, Moldova
173 participanți

Vorbim despre Yii, Laravel, Symphony, MySQL, PgSQL, WP, OpenCart... Pentru confort, opriți notificările. Parteneri: https://ciupacabra.com @js_ro @node_ro @python_ro @seo_ro @Romania_Bot Offtop: @holywars_ro Joburi: @php_job @Grupuri_IT

MySQL - comunitatea Română
MySQL - comunitatea Română
19 participanți

Comunitatea română a programatorilor MySQL.