আমি ধরে নিলাম আপনার অর্থ হ'ল আপনি চূড়ান্ত এসকিউএল কোয়েরিটি চান, এতে প্যারামিটার মানগুলি অন্তর্নিবিষ্ট হয়। আমি বুঝতে পারি যে এটি ডিবাগ করার জন্য দরকারী হবে, তবে প্রস্তুত বিবৃতিগুলি যেভাবে কাজ করে তা এটি নয়। পরামিতিগুলি ক্লায়েন্ট-সাইডে প্রস্তুত বিবৃতিটির সাথে মিলিত হয় না, সুতরাং পিডিওর কাছে কখনও কখনও তার পরামিতিগুলির সাথে মিলিত ক্যোয়ারী স্ট্রিংয়ের অ্যাক্সেস থাকা উচিত নয়।
আপনি () প্রস্তুত করার সময় এসকিউএল বিবৃতিটি ডাটাবেস সার্ভারে প্রেরণ করা হয় এবং আপনি () সম্পাদন করার সময় প্যারামিটারগুলি পৃথকভাবে প্রেরণ করা হয়। মাইএসকিউএলের সাধারণ কোয়েরি লগটি আপনি () কার্যকর করার পরে অন্তরবিচ্ছিন্ন মানগুলির সাথে চূড়ান্ত এসকিউএল দেখায়। নীচে আমার সাধারণ ক্যোয়ারী লগের একটি অংশ রয়েছে। আমি পিএসও থেকে নয়, মাইএসকিএল সিএলআই থেকে অনুসন্ধানগুলি চালিয়েছি, তবে নীতিটি একই।
081016 16:51:28 2 Query prepare s1 from 'select * from foo where i = ?'
2 Prepare [2] select * from foo where i = ?
081016 16:51:39 2 Query set @a =1
081016 16:51:47 2 Query execute s1 using @a
2 Execute [2] select * from foo where i = 1
আপনি PDO বৈশিষ্ট্য PDO :: ATTR_EMULATE_PREPARES সেট করে দিলে আপনি যা চান তা পেতে পারেন। এই মোডে, PDO এসকিউএল কোয়েরিতে পরামিতিগুলিকে বিভক্ত করে এবং যখন আপনি কার্যকর করেন তখন পুরো ক্যোয়ারী প্রেরণ করে। এটি সত্য প্রস্তুত কোয়েরি নয়। () সম্পাদন করার পূর্বে আপনি এসকিউএল স্ট্রিংয়ে ভেরিয়েবলগুলি ইন্টারপোল্ট করে প্রস্তুত ক্যোয়ারির সুবিধাগুলি হ্রাস করবেন।
@ আফিলিনার মন্তব্য:
না, পাঠ্য এসকিউএল কোয়েরি কার্যকর করার সময় প্যারামিটারগুলির সাথে মিলিত হয় না । সুতরাং পিডিওর জন্য আপনাকে দেখানোর মতো কিছুই নেই।
অভ্যন্তরীণভাবে, আপনি PDO :: ATTR_EMULATE_PREPARES ব্যবহার করে, পিডিও এসকিউএল কোয়েরির একটি অনুলিপি তৈরি করে এবং কার্যকর করার আগে প্যারামিটার মানগুলিকে ইন্টারপোল্ট করে। তবে পিডিও এই সংশোধিত এসকিউএল কোয়েরিটি প্রকাশ করে না।
PDOStatement অবজেক্টটির একটি বৈশিষ্ট্য রয়েছে $ ক্যোয়ারী স্ট্রিং, তবে এটি কেবল PDOStatement এর জন্য নির্ধারকটিতে সেট করা আছে এবং যখন কোয়েরিটি পরামিতিগুলি দিয়ে আবার লেখা হয় তখন তা আপডেট হয় না।
পিডিওর কাছে তাদের পুনর্লিখিত ক্যোয়ারীটি প্রকাশ করার জন্য অনুরোধ করা যুক্তিসঙ্গত বৈশিষ্ট্যের অনুরোধ হবে। আপনি এমনকি PDO :: ATTR_EMULATE_PREPARES ব্যবহার না করা সত্ত্বেও এটি আপনাকে "সম্পূর্ণ" কোয়েরি দেয় না।
এই কারণেই আমি মাইএসকিউএল সার্ভারের সাধারণ ক্যোয়ারী লগটি ব্যবহার করার উপরে ভিত্তি করে কাজটি দেখাই, কারণ এই ক্ষেত্রে এমনকি প্যারামিটারের স্থানধারকগুলির সাথে একটি প্রস্তুত ক্যোয়ারী সার্ভারে আবারও লেখা হয়, যেখানে প্যারামিটার মানগুলি ক্যোয়ারী স্ট্রিংয়ে ব্যাকফুল হয়। তবে এটি কেবল লগিংয়ের সময় করা হয়, কোয়েরি কার্যকর করার সময় নয়।