sprintf () Versus mysql_query ()
-
26-09-2019 - |
Question
de la difficulté à formatage de mon code à exécuter sans erreur en utilisant sprintf () Quand je lance le code que je reçois cette erreur: Parse error: syntax error, T_VARIABLE inattendue / emplacement sur la ligne 16
$query = sprintf('UPDATE `%s` SET `stock` = :amount WHERE `itemname` = '$q'', $tablename);
Au-dessus de la ligne 16 est dans mon code. Je suppose qu'il est la syntaxe liée.
Je reçois maintenant l'erreur suivante:
Erreur fatale: Uncaught exception 'PDOException' message 'SQLSTATE [42000]: Erreur de syntaxe ou violation d'accès: 1065 requête a été vide' dans /home/content/63/6563663/html/inventory/pg.php:19 Stack trace: # 0 /home/content/63/6563663/html/inventory/pg.php(19): PDOStatement-> execute () # 1 {main} jetés dans / home / content / 63/6563663 / html / inventaire / pg.php sur la ligne 19
Ceci est tout mon bloc de code:
<?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();
}
}
?>
Merci, semble mon erreur traite de l'exécution de PDO, pas la requête elle-même. Si quelqu'un a des idées sur ce que ce serait formidable. Alan, je votre méthode pour les citations ainsi que je courais la requête par mysql_real_escape_string ().
Pas de solution correcte
Autres conseils
S'il vous plaît ne pas construire des requêtes SQL sur des variables. Utiliser la liaison des variables.
Essayez ceci:
$query = sprintf('UPDATE
% sSET
stock= :amount WHERE
itemname= '.$q, $tablename);
Vous devez mettre un opérateur de concaténation entre les chaînes et les variables pour les combiner ensemble. Vous pouvez également vous débarrasser du ''
après $q
parce qu'il ne change pas la chaîne du tout.
Edit:
Je crois que je mal lu ce que vous essayez de faire. Essayez ceci:
$query = sprintf("UPDATE
% sSET
stock= :amount WHERE
itemname= '$q'", $tablename);
En changeant votre chaîne de PHP pour être entre guillemets, vous n'avez pas besoin d'échapper à vos guillemets simples, et $ q sera étendu à sa valeur.
En outre, assurez-vous que vous exécutez $ q et $ tablename par mysql_real_escape_string()
pour Prevent l'injection SQL.
comme ceci:
$query = sprintf('UPDATE `%s` SET `stock` = :amount WHERE `itemname` = \'$q\'', $tablename);
ou
$query = sprintf("UPDATE `%s` SET `stock` = :amount WHERE `itemname` = \'$q\'", $tablename);
Vous ne pouvez pas avoir unescaped '
s dans des chaînes délimitées par '
. Soit "
s unescaped dans des chaînes délimitées par "
. Pour échapper à la chaîne delimiter vous devez préfixer un caractère \
.