Frage

Probleme Formatierung meinen Code, ohne Fehler auszuführen sprintf () Wenn ich den Code ausführen ich diesen Fehler: Parse error: Syntaxfehler, unerwartete T_VARIABLE in / Lage auf der Leitung 16

 $query = sprintf('UPDATE `%s` SET `stock` = :amount WHERE `itemname` = '$q'', $tablename);

ist oberhalb der Linie 16 in meinem Code. Ich nehme an, es wird Syntax verwendet.

Ich bin jetzt die folgende Fehlermeldung empfangen:

Fatal error: abgefangene Ausnahme 'PDOException' mit der Meldung 'SQLSTATE [42000]: Syntaxfehler oder Zugriffsverletzung: 1065 Abfrage war leer' in /home/content/63/6563663/html/inventory/pg.php:19 Stapel trace: # 0 /home/content/63/6563663/html/inventory/pg.php(19): PDOStatement-> execute () # 1 {main} geworfen in / home / content / 63/6563663 / html / Inventar / pg.php on line 19

Dies ist mein ganzer Codeblock:

 <?php

 $u=$_GET["u"];

 if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form2")) {
 $amount = isset($_POST['amount']) ? $_POST['amount'] : null;
 if (null != $amount) {

 $user = 'username';
 $pass = 'password';
 $pdo = new PDO('mysql:localhost', $user, $pass);
 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 session_start();
 $tablename = $_SESSION['MM_Username'];
 $query = sprintf('UPDATE %s SET stock= :amount WHERE itemname= '.$u, $tablename);
 $stmt = $pdo->prepare($UpdateQuery);
 $stmt->bindParam('amount', $amount);
 $stmt->execute();
 }
 }

 ?>

Danke, scheint mein Fehler wird mit der PDO Ausführung handelt, nicht die Abfrage selbst. Wenn jemand irgendwelche Ideen, das hat wäre es toll. Alan, habe ich Ihre Methode für die Anführungszeichen und auch die Abfrage leite durch mysql_real_escape_string ().

Keine korrekte Lösung

Andere Tipps

Bitte bauen keine SQL-Abfragen von Variablen aus. Verwenden Sie Bind-Variablen.

Siehe http://bobby-tables.com/php.html

Versuchen Sie diese:

$query = sprintf('UPDATE% sSETstock= :amount WHEREitemname= '.$q, $tablename);

Sie benötigen einen Verkettungsoperator zwischen Strings und Variablen zu setzen, sie zusammen zu kombinieren. Sie können auch von der '' nach $q loszuwerden, weil es nicht die Zeichenfolge überhaupt zu ändern.

Edit:

Ich glaube, ich falsch verstanden, was Sie zu tun versuchen. Versuchen Sie stattdessen:

$query = sprintf("UPDATE% sSETstock= :amount WHEREitemname= '$q'", $tablename);

Mit dem PHP-Zeichenfolge zu ändern in doppelten Anführungszeichen zu sein, brauchen Sie nicht Ihre einfachen Anführungszeichen zu entkommen, und $ q wird auf seinen Wert erweitert werden.

Auch sicher sein, dass Sie $ q und $ Tabellennamen durch mysql_real_escape_string() zu Verhindern, dass SQL-Injection ausgeführt werden.

Wie so:

$query = sprintf('UPDATE `%s` SET `stock` = :amount WHERE `itemname` = \'$q\'', $tablename);

oder

$query = sprintf("UPDATE `%s` SET `stock` = :amount WHERE `itemname` = \'$q\'", $tablename);

Sie können nicht unescaped 's in Saiten durch ' begrenzt. Entweder unescaped "s in Strings begrenzt durch ". Um die Zeichenfolge zu entkommen Begrenzer Sie ein \ Zeichen voranstellen müssen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top