كيف يمكنني الحصول على النسخة المستقلة من استعلام معلمة؟
-
22-09-2019 - |
سؤال
أحاول تحديث مكتبة قاعدة البيانات التي نستخدمها في العمل لاستخدام استعلامات معلمة حتى لا يضطر زملاء العمل الذين ليسوا على دراية كبيرة بحقن 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 () في رمز المصدر الخاص بك بوظيفة التفاف الخاصة بك (إذا كنت تستطيع ذلك ، فقد ترغب هذا على مستوى قاعدة البيانات.
جيم