Bolehkah Penyata Disediakan PDO Mengikat Pengecam atau Kata Kunci Sintaks?
Dalam percubaan untuk membina pertanyaan dinamik dengan pembolehubah yang mewakili jadual, medan /column, dan nilai untuk dicari, seseorang mungkin menghadapi kesukaran yang tidak dijangka apabila menggunakan PDO yang disediakan kenyataan. Khususnya, menggunakan bindParam() atau bindValue() untuk mengikat pembolehubah ini boleh mengakibatkan set hasil kosong.
Untuk menyelidiki inti isu, adalah penting untuk memahami bahawa ruang letak PDO ditetapkan untuk mewakili literal data. Oleh itu, cubaan untuk menggunakannya sebagai pengecam (seperti nama jadual atau medan) atau kata kunci sintaks (cth., "SUKA") boleh membawa kepada tingkah laku yang salah.
Secara khusus, PDO tidak menawarkan sokongan yang wujud untuk pengecam yang mengikat . Ini menunjukkan bahawa pembangun mesti memikul tanggungjawab mengendalikan pengecam ini sendiri. Untuk memastikan pelaksanaan yang betul, terdapat peraturan ketat yang perlu dipatuhi:
Peraturan untuk Pengecam Mengikat:
Peraturan pemformatan ini menghalang ralat sintaks dan kelemahan suntikan SQL.
Peraturan untuk Mengikat Kata Kunci Sintaks:
Contoh:
Pertimbangkan perkara berikut coretan kod, yang mematuhi perkara yang dinyatakan di atas peraturan:
$allowed = array("name", "price", "qty"); $key = array_search($_GET['field'], $allowed); $field = $allowed[$key]; $query = "SELECT $field FROM t"; // Value is safe
Ringkasnya, sementara pernyataan PDO yang disediakan cemerlang dalam mengikat literal data, mereka kekurangan sokongan untuk pengecam atau kata kunci sintaks yang mengikat. Dengan mematuhi peraturan yang digariskan dengan tekun, pembangun boleh memastikan pelaksanaan pertanyaan dinamik yang selamat dan tepat yang menggunakan komponen kritikal ini.
Atas ialah kandungan terperinci Bolehkah Penyata Disediakan PDO Mengikat Nama Jadual dan Lajur, atau Kata Kunci SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!