首页 >后端开发 >php教程 >如何使用准备好的语句在 MySQLi 中构建动态 LIKE 条件 SELECT 查询?

如何使用准备好的语句在 MySQLi 中构建动态 LIKE 条件 SELECT 查询?

Barbara Streisand
Barbara Streisand原创
2024-12-06 10:48:11515浏览

How to Build a Dynamic LIKE Condition SELECT Query in MySQLi Using Prepared Statements?

使用动态 LIKE 条件构建 SELECT 查询作为 MySQLi 准备语句

问题

用户可以输入可变数量的搜索词,并且需要根据这些术语动态构建相应的查询。目标是创建一个适应此动态输入的准备好的语句。

解决方案

构造查询表达式:

将每个搜索词包装在带有用于绑定值的占位符的 LIKE 条件(%?).

示例:

$construct .= "name LIKE %?%";

绑定参数:

打包数据类型和输入值使用 splat 运算符将其放入一个数组中(...).

示例:

$parameters = ['sss', '%Bill%', '%N_d%', '%Dave%'];

准备和执行语句:

准备语句使用动态 WHERE 子句并绑定参数。

$stmt = $mysqli->prepare('SELECT * FROM info WHERE ' . implode(' OR ', $conditions));
$stmt->bind_param(...$parameters);
$stmt->execute();

检索结果:

执行查询并根据需要获取结果。

$result = $stmt->get_result();
foreach ($result as $row) {
    echo '<div>' . $row['name'] . '</div>\n'; 
}

示例更正代码:

<?php
$string = "my name";
$search_exploded = explode(" ", $string);
$num = count($search_exploded);

$conditions = [];
$parameters = [''];
foreach (array_unique($search_exploded) as $value) {
    $conditions[] = "name LIKE ?";
    $parameters[0] .= 's';
    $parameters[] = "%{$value}%";
}

$query = "SELECT * FROM info";
if ($conditions) {
    $stmt = $mysqli->prepare($query . ' WHERE ' . implode(' OR ', $conditions));
    $stmt->bind_param(...$parameters);
    $stmt->execute();
    $result = $stmt->get_result();
} else {
    $result = $conn->query($query);
}
foreach ($result as $row) {
    echo '<div>' . $row['name'] . '</div>\n'; 
}

?>

以上是如何使用准备好的语句在 MySQLi 中构建动态 LIKE 条件 SELECT 查询?的详细内容。更多信息请关注PHP中文网其他相关文章!

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