Saya cuba menulis kenyataan yang disediakan untuk input pengguna. Bilangan parameter berubah berdasarkan input pengguna. Oam sedang mencuba kod ini
Kod PHP:
$string = "my name"; $search_exploded = explode( " ", $string ); $num = count( $search_exploded ); $cart = array(); for ( $i = 1; $i <= $num; $i ++ ) { $cart[] = 's'; } $str = implode( '', $cart ); $inputArray[] = &$str; $j = count( $search_exploded ); for ( $i = 0; $i < $j; $i ++ ) { $inputArray[] = &$search_exploded[ $i ]; } print_r( $inputArray ); foreach ( $search_exploded as $search_each ) { $x ++; if ( $x == 1 ) { $construct .= "name LIKE %?%"; } else { $construct .= " or name LIKE %?%"; } } $query = "SELECT * FROM info WHERE $construct"; $stmt = mysqli_prepare( $conn, $query ); call_user_func_array( array( $stmt, 'bind_param' ), $inputArray ); if ( mysqli_stmt_execute( $stmt ) ) { $result = mysqli_stmt_get_result( $stmt ); if ( mysqli_num_rows( $result ) > 0 ) { echo $foundnum = mysqli_num_rows( $result ); while( $row = mysqli_fetch_array( $result, MYSQLI_ASSOC ) ) { echo $id = $row['id']; echo $name = $row['name']; } } }
Apabila saya print_r($inputArray)
keluarannya ialah:
Array ( [0] => ss [1] => my [2] => name )
Tiada ralat ditunjukkan dalam log ralat.
Apa yang berlaku?
Tulis pengendali pertanyaan generik dan hantar pertanyaan anda, tatasusunan parameter dan senarai jenis parameter. Mengembalikan set hasil atau mesej. Ini adalah versi mysqli peribadi saya sendiri (saya kebanyakannya menggunakan PDO, tetapi mempunyai fungsi yang sama disediakan untuk ini). Lakukan perkara yang sama untuk sisipan, kemas kini dan pemadaman. Kemudian hanya kekalkan satu pustaka anda dan gunakannya untuk semua yang anda lakukan :) Ambil perhatian bahawa jika anda bermula dengan ini, anda mungkin mahu menangani ralat sambungan dsb. dengan lebih baik.
%
Parameter sekeliling, bukan ruang letak.Coretan kod saya akan menggunakan sintaks mysqli berorientasikan objek, bukannya sintaks prosedur yang ditunjukkan oleh kod anda.
Mula-mula anda perlu menyediakan bahan-bahan yang diperlukan:
Saya akan menggabungkan #2 dan #3 menjadi pembolehubah untuk "membongkar" lebih mudah menggunakan operator percikan (
...
). Rentetan jenis data mestilah elemen pertama, kemudian satu atau lebih elemen akan mewakili nilai terikat.Sebagai kemasukan logik, jika tiada syarat dalam klausa WHERE, tidak ada faedah dalam menggunakan pernyataan yang disediakan hanya menanyakan jadual secara langsung.
Kod: (PHPize.demo dalam talian)
Untuk sesiapa yang mencari teknik pertanyaan dinamik yang serupa:
SELECT
,IN()
mengandungi bilangan nilai dinamikINSERT
一次execute()
Nombor garisan dinamik dipanggil