我正在尝试为用户输入编写准备好的语句。参数数量根据用户输入而变化。 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()
调用的动态行数