首页 >后端开发 >php教程 >如何使用 mysqli 预准备语句高效构建动态 LIKE 查询?

如何使用 mysqli 预准备语句高效构建动态 LIKE 查询?

Linda Hamilton
Linda Hamilton原创
2024-12-03 08:23:10277浏览

How to Efficiently Build Dynamic LIKE Queries with mysqli Prepared Statements?

使用 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn