Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk Membina Kenyataan Secure MySQLi Disediakan dengan Keadaan LIKE Pembolehubah?
Membina Pertanyaan PILIH dengan Keadaan Pembolehubah LIKE sebagai Penyata Disediakan mysqli
Apabila bekerja dengan input pengguna, adalah penting untuk menyediakan kenyataan untuk mengelakkan Suntikan SQL dan memastikan integriti data. Ini menjadi mencabar apabila bilangan keadaan LIKE berubah-ubah.
Gambaran Keseluruhan Masalah
Coretan kod cuba menyelesaikan isu ini dengan mencipta keadaan LIKE secara dinamik berdasarkan input pengguna . Walau bagaimanapun, ia gagal memformatkan parameter dengan betul untuk pernyataan yang disediakan.
Penyelesaian
Penyelesaian terletak pada meletakkan % kad bebas di sekeliling parameter, bukan pemegang tempat. Ini memastikan bahawa parameter digunakan untuk menapis pertanyaan.
Penjelasan Terperinci
Memulakan Bahan:
a. Cipta tatasusunan ungkapan klausa WHERE menggunakan OR.
b. Tentukan jenis data bagi nilai (dalam kes ini, rentetan).
c. Gabungkan jenis data dan parameter ke dalam tatasusunan tunggal.
Sediakan Syarat:
a. Tukar input pengguna kepada tatasusunan nilai unik.
b. Untuk setiap nilai, cipta ungkapan SUKA.
c. Kemas kini tatasusunan parameter untuk memasukkan jenis data dan nilai kad bebas.
Sediakan Pertanyaan:
a. Mulakan dengan pertanyaan SELECT * asas.
b. Jika terdapat syarat, tambah klausa WHERE dengan ungkapan dinamik.
Ikat Parameter dan Laksanakan:
a. Ikat tatasusunan parameter pada pernyataan yang disediakan menggunakan operator percikan (...).
b. Laksanakan pernyataan dan dapatkan semula keputusan jika ada.
Contoh Kod:
$string = "Bill N_d Dave"; $conditions = []; $parameters = ['']; foreach (array_unique(explode(' ', $string)) as $value) { $conditions[] = "name LIKE ?"; $parameters[0] .= 's'; $parameters[] = "%{$value}%"; } $query = "SELECT * FROM info"; if ($conditions) { $stmt = $mysqli->prepare($query . ' WHERE ' . implode(' OR ', $conditions)); $stmt->bind_param(...$parameters); $stmt->execute(); $result = $stmt->get_result(); } else { $result = $conn->query($query); } foreach ($result as $row) { echo "<div>{$row['name']}</div>\n"; }
Nota Tambahan:
Atas ialah kandungan terperinci Bagaimana untuk Membina Kenyataan Secure MySQLi Disediakan dengan Keadaan LIKE Pembolehubah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!