كيف يمكنني الحصول على النسخة المستقلة من استعلام معلمة؟

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

سؤال

أحاول تحديث مكتبة قاعدة البيانات التي نستخدمها في العمل لاستخدام استعلامات معلمة حتى لا يضطر زملاء العمل الذين ليسوا على دراية كبيرة بحقن SQL إلى التذكر للهروب من المدخلات والتمرير في مجموعة من المعلمات بدلاً من ذلك (أنا " تأمل pg_query_params).

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

بمعنى آخر ، عند تنفيذ استعلام معلمة مثل

pg_query_params('SELECT id FROM table WHERE foo = $1', array('bar'));

اريد الحصول على شيء مثل

SELECT id FROM table WHERE foo = 'bar'
هل كانت مفيدة؟

المحلول

PostgreSQL البروتوكول الممتد (الذي يستخدم بواسطة pg_query_params) يفصل المعلمات عن الاستفسارات.

يتم بناء الاستعلامات في نهاية المطاف فقط على جانب الخادم ، لا توجد طريقة لإنشاءها على جانب العميل باستخدام فقط PostgreSQLقدرات.

يمكنك استبدال قيم المعلمات المقدمة وتسجيل الاستعلام قبل إرسال المعلمات باستخدام preg_replace.

تحديث:

يمكنك تمكين PostgreSQL تسجيل التي ستسجل الاستعلامات في ملف أو syslog (بما في ذلك المعلمات المرتبطة) على جانب الخادم ، ثم قم بتحميل هذا الملف بشكل دوري إلى أ PostgreSQL الطاولة.

نصائح أخرى

ما لم تتمكن من استبدال كل حدوث pg_query_params () في رمز المصدر الخاص بك بوظيفة التفاف الخاصة بك (إذا كنت تستطيع ذلك ، فقد ترغب هذا على مستوى قاعدة البيانات.

جيم

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