我正在嘗試為使用者輸入編寫準備好的語句。參數數量根據使用者輸入而變化。 Oam 正在嘗試此程式碼
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']; } } }
當我 print_r($inputArray)
時,輸出為:
Array ( [0] => ss [1] => my [2] => name )
錯誤日誌中沒有顯示錯誤。
出了什麼問題?
編寫一個通用查詢處理程序並向其傳遞您的查詢、參數陣列和參數類型清單。傳回一組結果或訊息。這是我自己的 mysqli 個人版本(我主要使用 PDO,但也為此設定了類似的功能)。對插入、更新和刪除執行相同的操作。然後只需維護您的一個庫並將其用於您所做的所有事情:) 請注意,如果您以此開始,您可能希望更好地處理連接錯誤等。
%
環繞參數,而不是佔位符。我的程式碼片段將使用物件導向的 mysqli 語法,而不是您的程式碼演示的過程語法。
首先您需要設定必要的成分:
我將把 #2 和 #3 組合成一個變量,以便使用 splat 運算子(
...
)進行更簡單的「解包」。資料類型字串必須是第一個元素,然後一個或多個元素將代表綁定值。作為邏輯包含,如果 WHERE 子句中沒有條件,則使用準備好的語句沒有任何好處;直接查詢表即可。
程式碼:(PHPize.online 示範)
對於任何尋找類似動態查詢技術的人:
SELECT
,IN()
中包含動態數量的值INSERT
一次execute()
呼叫的動態行數