sprintf () Versus mysql_query ()
-
26-09-2019 - |
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.
Versuchen Sie diese:
$query = sprintf('UPDATE
% sSET
stock= :amount WHERE
itemname= '.$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
% sSET
stock= :amount WHERE
itemname= '$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.