Bolehkah Parameter Menggantikan Nama Jadual atau Lajur dalam Penyata PDO PHP?
Adalah mustahil untuk menghantar nama jadual sebagai parameter kepada pernyataan PDO yang disediakan. Pertimbangkan kod berikut yang cuba berbuat demikian:
$stmt = $dbh->prepare('SELECT * FROM :table WHERE 1'); if ($stmt->execute(array(':table' => 'users'))) { var_dump($stmt->fetchAll()); }
Pendekatan ini akan mengakibatkan ralat, kerana nama jadual dan lajur tidak boleh digantikan dengan parameter.
Pemasukan Selamat bagi Nama Jadual ke dalam Pertanyaan SQL
Untuk memasukkan nama jadual ke dalam pertanyaan SQL dengan selamat, pendekatan alternatif diperlukan. Elakkan memasukkan input pengguna secara langsung ke dalam pertanyaan, seperti:
$sql = "SELECT * FROM $table WHERE 1"
Sebaliknya, pertimbangkan untuk menapis dan membersihkan input. Satu kaedah melibatkan menghantar parameter ringkas kepada fungsi yang akan melaksanakan pertanyaan secara dinamik. Pernyataan suis() kemudiannya boleh digunakan untuk menyenarai putih nama jadual yang sah. Contohnya:
function buildQuery( $get_var ) { switch($get_var) { case 1: $tbl = 'users'; break; } $sql = "SELECT * FROM $tbl"; }
Dengan meninggalkan kes lalai atau menggunakan yang memaparkan mesej ralat, anda menjamin bahawa hanya nilai yang diingini akan digunakan.
Atas ialah kandungan terperinci Bolehkah Penyata Disediakan PHP PDO Menggunakan Parameter untuk Nama Jadual atau Lajur?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!