في Kohana 3، يمكنك الآن ربط بالمعايير المسماة في الاستعلامات، ولكن كيف يمكنني الهروب من تلك التي لا أستطيع ربطها؟

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

  •  18-09-2019
  •  | 
  •  

سؤال

في Kohana 3، يمكنني ربط نماذج في استعلام مثل

$query = 'SELECT name FROM users WHERE id = :id';

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

سؤالي هو، كيف يمكنني الهروب من الأحرف السيئة المحتملة عند القيام بهذا النوع من بناء السلسلة؟ في Kohana 2.x، يمكنك القيام به $this->db->escape() ولكن بما أن Kohana 3 يختلف بشكل جذري، سأتخيل أن هناك طريقة جديدة؟

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

المحلول

فقط للإضافة إلى إجابة Mark Byers، والسبب في فشل معلمة اسم الجدول هو أن المعلمات يتم هربها القيم, ، في حين أن اسم الجدول هو معرف. وبعد ما يحدث من المحتمل أن يكون اسم الجدول ملفوفا في علامات الاقتباس، في حين أنه يجب أن تكون ملفوفة في backticks بدلا من ذلك.

ومع ذلك، كما يقول مارك، فإن الحاجة إلى الهروب أسماء الجدول تشير إلى تصميم سيء. يجب أن يكون إما مشفرة صعبة أو مخزنة في بعض ملف التكوين الذي يمكن موثوقية محتوياته بعدم الحاجة إلى الهروب على أي حال. في محاولة لتغطية جميع قواعدك إلى حد ما لا تثق فيه التكوين الخاص بك هو على الأرجح مضيعة للوقت.

نصائح أخرى

لم أستخدم Kohana أبدا، لذلك الاعتذار إذا كان هذا التعليق غير ذي صلة تماما، لكن لدي بعض التعليقات حول ما تحاول القيام به:

عندما أستخدم اسم المعلمة باسم الجدول، فشل ذلك.

أفترض أن هذا لأنه يعتمد على آلية المعلمة قاعدة البيانات الأساسية، ولا أعرف أي قاعدة بيانات تسمح لك بإعطاء اسم جدول كمعلمة في استعلام. لذلك نعم، على الأرجح سيكون عليك بناء سلسلة نفسك.

كيف يمكنني الهروب من الشخصيات السيئة المحتملة عند القيام بهذا النوع من بناء السلسلة؟

يبدو أن هذا السؤال غريب ... إما أن يكون لديك شخصيات سيئة محتملة في بعض أسماء طاولتك ... إذا كان الأمر كذلك، لماذا؟ وإلا فإنك تتلقى اسم الجدول من مصدر غير موثوق به (مستخدم؟). هذا يبدو وكأنه فكرة سيئة بالنسبة لي. ماذا لو حاولوا القراءة من جدول لم يكن من المفترض أن يكون لهم الوصول إليه؟ لن يكون من الأفضل أن يكون لديك قائمة محددة جيدا بأسماء الألواح المسموح بها وتحقق من أن الجدول موجود في تلك القائمة، بدلا من الهروب من أسماء الجدول السيئة المحتملة؟

ولدي مراقبة نهائية واحدة: إذا كنت قادرا على تغيير اسم الجدول في استعلام، فلا يزال يعمل، فهذا ربما علامة على أن قاعدة البيانات الخاصة بك لا تطبيعها بشكل صحيح. ربما يمكنك الجمع بين جداولك وإضافة عمود إضافي مع معلومات حول التجميع، واستخدم جملة أينية لتحديد البيانات التي تريدها؟ سأحتاج إلى معرفة المزيد عن نموذجك لاقتراح شيء أكثر ملموسة.

لست متأكدا مما إذا كان هذا يساعد على الإجابة على سؤالك على الإطلاق، لكن هذه كانت أفكاري حول قراءة سؤالك. آمل أن تتمكن من استخدام بعضها.

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