سؤال

أواجه مشكلة في تنسيق الكود الخاص بي للتنفيذ دون خطأ باستخدام sprintf () عندما أقوم بتشغيل الكود ، أحصل على هذا الخطأ: خطأ في الحاجز: خطأ في بناء الجملة ، T_Variable غير متوقع في /الموقع على السطر 16

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

أعلاه هو السطر 16 في الكود الخاص بي. أفترض أنه يرتبط ببناء الجملة.

أتلقى الآن الخطأ التالي:

خطأ فادح: استثناء غير معطل "pdoException" مع رسالة SQLSTATE [42000]: خطأ في بناء الجملة أو انتهاك الوصول: 1065 كان الاستعلام فارغًا "في /home/content/63/6563663/html/inventory/pg.php:19 تتبع: # 0/home/content/63/6563663/html/inventory/pg.php(19): pdostatement-> execute () #1 {main} تم إلقاؤه في /home/content/63/656363/html/inventory/pg.php على الخط 19

هذا هو كتلة الكود بالكامل:

 <?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();
 }
 }

 ?>

شكرًا لك ، يبدو أن خطأي يتعامل مع تنفيذ PDO ، وليس الاستعلام نفسه. إذا كان لدى أي شخص أي أفكار حول ذلك ، فسيكون ذلك رائعًا. آلان ، لقد استخدمت طريقتك للاقتباسات وأيضًا أقوم بتشغيل الاستعلام من خلال mysql_real_escape_string ().

لا يوجد حل صحيح

نصائح أخرى

يرجى عدم بناء استعلامات SQL من المتغيرات. استخدام متغيرات ربط.

يرى http://bobby tables.com/php.html

جرب هذا:

$query = sprintf('UPDATE٪سSETمخزون= :amount WHEREاسم العنصر= '.$q, $tablename);

تحتاج إلى وضع مشغل متسلسل بين السلاسل والمتغيرات لدمجها معًا. يمكنك أيضًا التخلص من '' بعد $q لأنه لا يغير السلسلة على الإطلاق.

تعديل:

أعتقد أنني أخطأت في قراءة ما تحاول القيام به. جرب هذا بدلاً من ذلك:

$query = sprintf("UPDATE٪سSETمخزون= :amount WHEREاسم العنصر= '$q'", $tablename);

من خلال تغيير سلسلة PHP الخاصة بك لتكون ضمن عروض أسعار مزدوجة ، لا تحتاج إلى الهروب من اقتباساتك الفردية ، وسيتم توسيع $ Q إلى قيمتها.

تأكد أيضًا من قيامك بتشغيل $ Q و $ tablename mysql_real_escape_string() لمنع حقن SQL.

مثل ذلك:

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

أو

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

لا يمكنك تكوينك 'في الأوتار المحددة بواسطة '. إما دون تكوين "في الأوتار المحددة بواسطة ". للهروب من محدد السلسلة ، تحتاج إلى إعداد أ \ حرف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top