Mengikat Pengecam dan Kata Kunci Sintaks dalam PHP PDO Penyata Disediakan
Pertanyaan dinamik membenarkan operasi pangkalan data yang fleksibel dengan menggunakan pembolehubah untuk menentukan nama jadual, lajur nama, dan nilai carian. Walau bagaimanapun, pengecam yang mengikat (nama jadual atau medan) atau kata kunci sintaks menggunakan pernyataan PDO yang disediakan boleh membawa kepada hasil yang tidak dijangka.
Isu:
Apabila menggunakan bindParam() atau bindValue () untuk mengikat pembolehubah yang mewakili pengecam atau kata kunci sintaks, tatasusunan kosong dikembalikan dan bukannya yang dijangkakan keputusan pangkalan data.
Penjelasan:
Pernyataan yang disediakan PDO boleh mengikat literal data sahaja. Oleh itu, percubaan untuk mengikat pengecam atau kata kunci tidak akan menghasilkan hasil yang diingini.
Penyelesaian:
Untuk mencipta pertanyaan dinamik yang selamat dan boleh dipercayai, adalah penting untuk:
Contoh Kod:
Untuk memformat dan mengesahkan pengecam:
$field = "`" . str_replace("`", "``", $field) . "`";
Untuk menyenarai putih dan sahkan kata kunci:
$dir = $_GET['dir'] == 'DESC' ? 'DESC' : 'ASC';
Kemudian, masukkan pembolehubah yang telah dibersihkan dalam yang disediakan pernyataan:
$stmt = $db->prepare(' SELECT * FROM ? WHERE ? LIKE ? '); $stmt->bindParam(1, $searchTable); $stmt->bindParam(2, $searchBy); $stmt->bindValue(3, '%' . $searchTerm . '%');
Dengan mematuhi peraturan ini, anda boleh memastikan kesahihan dan keselamatan pertanyaan pangkalan data dinamik anda.
Atas ialah kandungan terperinci Bolehkah saya Mengikat Pengecam dan Kata Kunci dalam Penyata Disediakan PHP PDO?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!