Menggunakan Penyata Disediakan untuk Mengikat Pengecam dan Kata Kunci
Masalah:
Mencipta pertanyaan dinamik menggunakan pernyataan yang disediakan, tetapi cuba untuk mengikat nama jadual, nama medan atau sintaks kata kunci menghasilkan tatasusunan kosong.
Kod:
function search_db($db, $searchTerm, $searchBy, $searchTable){ try{ $stmt = $db->prepare(' SELECT * FROM ? WHERE ? LIKE ? '); $stmt->bindParam(1, $searchTable); $stmt->bindParam(2, $searchBy); $stmt->bindValue(3, '%'. $searchTerm.'%'); $stmt->execute(); } catch(Exception $e) { return array(); } return $stmt->fetchAll(PDO::FETCH_ASSOC); }
Keputusan yang Dijangka:
Suatu tatasusunan hasil daripada pangkalan data.
Keputusan Sebenar:
Kosong tatasusunan.
Punca:
Pernyataan yang disediakan hanya boleh mengikat literal data, bukan pengecam (seperti nama jadual atau medan) atau kata kunci sintaks.
Penyelesaian:
Untuk menggunakan pengecam atau kata kunci dinamik, ikut ini langkah:
Format Pengecam:
Nilai Dinamik Senarai Putih:
Kod Diubah Suai:
$field = "`" . str_replace("`", "``", $field) . "`"; $table = "`" . str_replace("`", "``", $table) . "`"; $sql = "SELECT * FROM $table WHERE $field = ?";
Kata kunci:
Jika perlu, senarai putih dan sahkan kata kunci dinamik juga. Dengan mengikut garis panduan ini, anda boleh memasukkan pengecam dan kata kunci dinamik dengan selamat dalam penyata yang anda sediakan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Jadual Dinamik dan Nama Medan dengan Selamat dalam Penyata Disediakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!