Pertanyaan LIKE Dinamik Menggunakan Penyata Disediakan mysqli
Soalan ini menangani isu mewujudkan kenyataan yang disediakan dengan bilangan syarat LIKE yang berubah-ubah berdasarkan input pengguna. Kod PHP yang disediakan cuba membina pernyataan, tetapi terdapat ralat yang berkaitan dengan pemformatan klausa LIKE.
Masalah utama terletak pada tempat tanda peratus (%) diletakkan di sekeliling parameter (?) dalam klausa LIKE. Daripada membungkus parameter, tanda peratus harus pergi di sekitar ruang letak, seperti yang ditunjukkan di bawah:
foreach ( $search_exploded as $search_each ) { $x ++; if ( $x == 1 ) { $construct .= "name LIKE %??%"; } else { $construct .= " or name LIKE %??%"; } }
Pembetulan ini memastikan bahawa nilai parameter (cth., "nama saya") diikat dengan betul pada klausa LIKE .
Selain itu, kod menggunakan rentetan bercantum ($bina) untuk membina klausa WHERE. Walau bagaimanapun, pendekatan yang lebih cekap dan selamat ialah menggunakan tatasusunan pemegang tempat bind_param() untuk semua parameter, seperti yang ditunjukkan di bawah:
$where_params = []; foreach ( $search_exploded as $search_each ) { $where_params[] = "%{$search_each}%"; } $query = "SELECT * FROM info WHERE name LIKE ?"; $stmt = mysqli_prepare( $conn, $query ); mysqli_stmt_bind_param( $stmt, "s", ...$where_params );
Kaedah ini mengendalikan sebarang bilangan keadaan LIKE dengan anggun dan menghapuskan risiko suntikan SQL kelemahan.
Dengan pengubahsuaian ini, pertanyaan LIKE dinamik boleh mencari rekod dengan betul berdasarkan berbilang pengguna yang ditentukan kriteria.
Atas ialah kandungan terperinci Bagaimana untuk Membina Pertanyaan Suka Dinamik dengan Cekap dengan Penyata Disediakan mysqli?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!