يرفض PHP PDO إعداد الاستعلام لتنفيذ بشكل صحيح - مشكلة الهروب؟

StackOverflow https://stackoverflow.com/questions/1060975

  •  21-08-2019
  •  | 
  •  

سؤال

وأواجه مشكلة مع استعلام أعد PHP مع شركة تنمية نفط عمان. رمز:

$link = new PDO("mysql:dbname=$dbname;host=127.0.0.1",$username,$password);
$link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$query = $link->prepare("SELECT locality_name FROM :passedday GROUP BY locality_name ORDER BY locality_name DESC");
$query->bindParam(":passedday",$day); //Where day is, well, a day passed to the script elsewhere
$query->execute();
$result = $query->fetchAll();
$link = null;
//Do things with the $result.

ورسالة الخطأ وأنا على الحصول هي:

وSQLSTATE [42000]: بناء الجملة خطأ أو الوصول إلى انتهاك: 1064 لديك خطأ لغوي في لغة SQL الخاص بك؛ دليل للتحقق من الذي يتوافق مع إصدار خادم MySQL الخاص لبناء الجملة الصحيح لاستخدام بالقرب من '' 05_26_09 'GROUP BY ORDER BY LOCALITY_NAME LOCALITY_NAME DESC "في السطر 1

وعندما تنفيذ الاستعلام على الخادم مباشرة، فإنها ترجع النتيجة المناسبة المنصوص دون أي مشكلة. أي أفكار ما أفعله خطأ؟

وTIA.

وتحرير:

ويتم تمرير $day كحجة GET. لذا، http://127.0.0.1/day.php?day=05_26_09 يؤدي إلى $day = $_GET['day'];.

هل كانت مفيدة؟

المحلول

وإذا كان من المفترض 05_26_09 للمراهنة على اسم الجدول، ثم اعتقد انك قمت مشكلة الهروب. هو نظام التشغيل المحلي يختلف عن الخادم على الهواء مباشرة؟

وأنا لا أعتقد أنه يمكنك استخدام bindValue() / bindParam() عن شيء آخر من القيم (على سبيل المثال. اسم الجدول، اسم الحقل). لذلك أنا أفاجأ قليلا، وأنه يعمل على النظام المحلي.

نصائح أخرى

وPDO يستخدم C-API الخلية لبيانات معدة.
http://dev.mysql.com/doc/ RefMan معلومات / 5.0 / EN / ماي-stmt-prepare.html يقول:

<اقتباس فقرة> علامات قانونية إلا في أماكن معينة في البيانات SQL. [...] ومع ذلك، لا يسمح لهم لمعرفات (مثل جدول أو عمود أسماء) وكقاعدة عامة من الإبهام وأنا استخدم: "إذا كنت لا يمكن اتمامه في وعلامات الاقتباس المفردة في مخصصة سلسلة الاستعلام لا يمكنك parametrize في بيان معد سلفا "

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