يرفض PHP PDO إعداد الاستعلام لتنفيذ بشكل صحيح - مشكلة الهروب؟
سؤال
وأواجه مشكلة مع استعلام أعد 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 يقول: