ألا تتخبط سلاسل PHP مثل الإدراج المتغير المتعدد؟
سؤال
أنا أستخدم 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=
في النهاية وستتسبب في حدوث خطأ عند محاولة تشغيل الاستعلام.