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.

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

Essayez ceci:

$query = sprintf('UPDATE% sSETstock= :amount WHEREitemname= '.$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% sSETstock= :amount WHEREitemname= '$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 \.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top