使用 mysqli 预准备语句进行动态 LIKE 查询
此问题解决了基于以下条件创建具有可变数量的 LIKE 条件的预准备语句的问题:用户输入。提供的 PHP 代码尝试构造语句,但存在与 LIKE 子句格式相关的错误。
关键问题在于百分号 (%) 放在参数 (?) 周围的位置在 LIKE 子句中。百分号不应包裹参数,而应围绕占位符,如下所示:
foreach ( $search_exploded as $search_each ) { $x ++; if ( $x == 1 ) { $construct .= "name LIKE %??%"; } else { $construct .= " or name LIKE %??%"; } }
此更正可确保参数值(例如“我的名字”)正确绑定到 LIKE 子句.
此外,代码使用连接字符串 ($construct) 来构建 WHERE 子句。然而,更高效、安全的方法是对所有参数使用bind_param()占位符数组,如下所示:
$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 );
此方法可以优雅地处理任意数量的 LIKE 条件并消除 SQL 注入的风险
通过这些修改,动态 LIKE 查询可以根据多个用户定义的条件正确搜索记录。
以上是如何使用 mysqli 预准备语句高效构建动态 LIKE 查询?的详细内容。更多信息请关注PHP中文网其他相关文章!