Bolehkah Pernyataan Berparameter Mengendalikan Nama Jadual?
Anda telah menghadapi masalah semasa cuba membuat parameter nama jadual dalam pernyataan yang disediakan. Mengasingkan pembolehubah yang bertujuan untuk perlindungan terhadap suntikan SQL telah mengakibatkan ralat.
Kod yang anda berikan termasuk fungsi insertRow, yang cuba mengikat nama jadual baharu sebagai pernyataan tanda soal.
function insertRow( $db, $mysqli, $new_table, $Partner, $Merchant, $ips, $score, $category, $overall, $protocol ) { $statement = $mysqli->prepare("INSERT INTO (?) VALUES (?,?,?,?,?,?,?);"); mysqli_stmt_bind_param( $statment, 'ssssisss', $new_table, $Partner, $Merchant, $ips, $score, $category, $overall, $protocol ); $statement->execute(); }
Malangnya, parameter nama jadual dalam pernyataan yang disediakan tidak mungkin. Penyataan yang disediakan hanya membenarkan parameter terikat pada elemen "nilai" pernyataan SQL. Nama jadual bukanlah nilai masa jalan dan mengubah kesahihan pernyataan, yang berpotensi mengubah maknanya.
Walaupun antara muka pangkalan data seperti PDO membenarkan penggantian pemegang tempat di mana-mana, nilai pemegang tempat jadual akan menjadi rentetan yang disertakan dalam SQL, mengakibatkan SQL tidak sah.
Untuk melindungi daripada suntikan SQL, adalah penting untuk menggunakan senarai putih jadual dan menyemak input pengguna terhadap senarai ini. Kod anda sepatutnya menyerupai yang berikut:
if (in_array($mytable, $whitelist)) { $result = $db->query("SELECT * FROM {$mytable}"); }
Atas ialah kandungan terperinci Bolehkah Penyata Disediakan Parameter Nama Jadual dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!