2014-03-03 3 views
5

Ich bin derzeit versucht, eine Abfrage auszuführen, wo der aktuelle Wert einer Spalte MySQL-Tabelle selbst um 1 erhöhen ... Lassen Sie mich zu zeigen, mit mysql query BeispielPDO vorbereitete Anweisung Probleme

$sql = mysql_query("UPDATE `table` SET quantity=quantity+1 WHERE id='$id'"); 

vermag ich nicht zu tun dies in PDO vorbereitete Anweisung ...

$sql = "UPDATE `table` SET quantity=:quants+1 WHERE id=:userid"; 
$sql_prep = $db->prepare($sql); 
$sql_prep->bindParam(":quants", what will i write here??); 
$sql_prep->bindParam(":userid", $id); 
$sql_prep->execute(); 

Hilfe benötigt ..! Dank

Antwort

3

Sie brauchen nicht, dass als Parameter zu übergeben, tun gerade:

$sql = "UPDATE `table` SET quantity=quantity+1 WHERE id=:userid"; 
$sql_prep = $db->prepare($sql); 
$sql_prep->bindParam(":userid", $id); 
$sql_prep->execute(); 
+0

Was ist mit sql_injection? Wird diese Abfrage die SQL-Injektion verhindern? – nick

+1

Keine Injektion, der einzige Parameter, den Sie an die Abfrage übergeben, ist Benutzer-ID. Die Menge ist intern in der Datenbank. –

+0

Beim Transponieren oder Bearbeiten von Daten in der Datenbank müssen Sie sich normalerweise keine Gedanken über die SQL-Injection machen. Die MySQL-Datenbank beschäftigt sich bereits mit nativen Daten und muss nicht darauf trainiert werden, wie sie gehandhabt wird. Die Ausnahme von dieser Regel ist, wenn Sie * SQL-Abfragen in einer gespeicherten Prozedur verfassen. – tadman

0

Sie brauchen nicht die quantity zu schützen, wie Sie nur einen Wert bereits in der db vermehren.

$sql = "UPDATE `table` SET quantity=quantity+1 WHERE id=:userid"; 

Sie können auch die Bindelinie für die

$sql_prep = $db->prepare($sql); 

// NOT NEEEDED --> $sql_prep->bindParam(":quants", what will i write here??); 

$sql_prep->bindParam(":userid", $id); 
$sql_prep->execute(); 

Prepared Statements sind zum Schutz von Daten werden von außen in die DB über Ihre Anfrage eingefügt :quants fallen.