Rumah >pangkalan data >tutorial mysql >Bolehkah Penyata Disediakan PDO Mengikat Nama Jadual dan Lajur, atau Kata Kunci SQL?

Bolehkah Penyata Disediakan PDO Mengikat Nama Jadual dan Lajur, atau Kata Kunci SQL?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-24 10:25:12538semak imbas

Can PDO Prepared Statements Bind Table and Column Names, or SQL Keywords?

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:

  1. Sertakan pengecam dalam tanda belakang.
  2. Keluarkan kutu belakang dalam pengecam dengan menggandakan mereka.

Peraturan pemformatan ini menghalang ralat sintaks dan kelemahan suntikan SQL.

Peraturan untuk Mengikat Kata Kunci Sintaks:

  1. Sementara pemformatan kata kunci tidak tersedia, senarai putih tersedia penting.
  2. Sahkan bahawa kata kunci dinamik sepadan dengan senarai nilai yang dibenarkan untuk mengelakkan penggantian kata kunci sewenang-wenangnya.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn