Penyata Disediakan Selamat dalam PHP untuk MySQL
Apabila bekerja dengan MySQL dan PHP, menggunakan pernyataan yang disediakan adalah penting untuk memastikan keselamatan pangkalan data anda pertanyaan. Pernyataan yang disediakan mempertahankan terhadap serangan suntikan SQL dengan memisahkan pernyataan SQL daripada input yang disediakan pengguna.
Mencipta Kenyataan Disediakan Selamat
Untuk mencipta pernyataan yang disediakan dengan selamat, kami' akan menggunakan coretan kod berikut:
$db = new mysqli("host", "user", "pw", "database"); $stmt = $db->prepare("SELECT * FROM mytable where userid=? AND category=? ORDER BY id DESC"); $stmt->bind_param('ii', intval($_GET['userid']), intval($_GET['category']));
Menjelaskan Kod
Mendapatkan Data
Selepas menyediakan pernyataan, anda boleh melaksanakannya, mendapatkan data dan mengulangi hasil:
$stmt->execute(); $stmt->store_result(); $stmt->bind_result($column1, $column2, $column3); while ($stmt->fetch()) { echo "col1=$column1, col2=$column2, col3=$column3 \n"; }
Tatasusunan Bersekutu untuk Kemudahan
Untuk mendapatkan semula data sebagai tatasusunan bersekutu (cth., untuk pertanyaan SELECT *), anda boleh menggunakan fungsi berikut:
function stmt_bind_assoc(&$stmt, &$out) { $data = mysqli_stmt_result_metadata($stmt); $fields = array(); $out = array(); $fields[0] = $stmt; $count = 1; while ($field = mysqli_fetch_field($data)) { $fields[$count] = &$out[$field->name]; $count++; } call_user_func_array(mysqli_stmt_bind_result, $fields); }
Fungsi ini membolehkan anda mengikat keputusan kepada tatasusunan bersekutu, menjadikannya lebih mudah untuk digunakan dalam kod anda:
$stmt->store_result(); $resultrow = array(); stmt_bind_assoc($stmt, $resultrow); while ($stmt->fetch()) { print_r($resultrow); }
Prestasi Pertimbangan
Walaupun kenyataan yang disediakan direka untuk meningkatkan prestasi, penggunaannya beberapa kali pada halaman mungkin tidak menghasilkan keuntungan yang ketara. Walau bagaimanapun, jika aplikasi anda menjalankan operasi pangkalan data dengan kerap, menyediakan penyata boleh menghasilkan peningkatan yang ketara dalam masa tindak balas.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Penyata Yang Disediakan dengan Selamat dalam PHP untuk Menyoal Pangkalan Data MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!