ألا تتخبط سلاسل PHP مثل الإدراج المتغير المتعدد؟

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

سؤال

أنا أستخدم PHP 5.2 مع قاعدة بيانات أوراكل 11.1.

الرمز

$query = oci_parse($conn, "SELECT * FROM COMMENTS WHERE PINID=$pinID and COMMENTID=$commentID");

النتائج في هذا الخطأ:

تحذير: OCI_EXECUTE () [function.oci-execute]: ora-00904: "تعليقات": معرف غير صالح في C: iodwww hello.php عبر الانترنت 159
^

لكن تشغيل هذا يعمل بشكل جيد:

$query = oci_parse($conn, "SELECT * FROM COMMENTS WHERE PINID=$pinID and COMMENTID=1");

هل هذا نتيجة لي ضخ متغيرات متعددة في سلسلة الاستعلام ، أم أنني ارتكب بعض الأخطاء الأخرى؟

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

المحلول

لا توجد مشكلة في متغيرات متعددة في أ بي أتش بي سلسلة.

لتصحيح المشكلة ، يمكنك المحاولة:

var_dump("SELECT * FROM COMMENTS WHERE PINID=$pinID and COMMENTID=$commentID");

ومعرفة ما إذا كان الإخراج يتطابق حقًا:

string(...) "SELECT * FROM COMMENTS WHERE PINID=1 and COMMENTID=1" 

الأشياء الوحيدة التي يمكنني التفكير فيها هي أن CommentId فارغ أو يحتوي على " n" أو شيء مرتبط به يسبب الخطأ.

ترمز Error الذي تطرحه قاعدة البيانات ، "اسم العمود الذي تم إدخاله إما مفقود أو غير صالح." ، لا معنى له بالنسبة لي إذا كان يعمل مع =1.

نصائح أخرى

لكل من الأداء وحقن SQL ، يجب أن تستخدم متغيرات العنصر النائب, ، مثل ذلك:

$query = oci_parse($conn, "SELECT * FROM COMMENTS WHERE PINID = :pinID and COMMENTID = :commentID");
oci_bind_by_name($query, ':pinID', $pinID, -1, SQLT_INT);
oci_bind_by_name($query, ':commentID', $commentID, -1, SQLT_INT);
oci_execute($query);

oci_execute()تحذير ليس تحذير PHP. هناك شيء خاطئ في الاستعلام الناتج.

اطبعها وألقي نظرة عليها.

حاول وضع المتغيرات داخل الأقواس:

$query = oci_parse($conn, "SELECT * FROM COMMENTS WHERE PINID={$pinID} and COMMENTID={$commentID}");

تأكد أيضًا من ذلك $commentID لا يعيد قيمة فارغة ستترك فقط COMMENTID= في النهاية وستتسبب في حدوث خطأ عند محاولة تشغيل الاستعلام.

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