
使用变量 LIKE 条件构建 SELECT 查询作为 mysqli 准备语句
处理用户输入时,必须准备语句以防止SQL注入并确保数据完整性。当 LIKE 条件的数量可变时,这变得具有挑战性。
问题概述
代码片段尝试通过根据用户输入动态创建 LIKE 条件来解决此问题。但是,它无法正确格式化准备好的语句的参数。
解决方案
解决方案在于在参数周围放置 % 通配符,而不是占位符。这确保了参数用于过滤查询。
详细说明
初始化成分:
a.使用 OR 创建 WHERE 子句表达式数组。
b.确定值的数据类型(在本例中为字符串)。
c.将数据类型和参数合并到一个数组中。
准备条件:
a。将用户输入转换为唯一值数组。
b.对于每个值,创建一个 LIKE 表达式。
c.更新参数数组以包含数据类型和通配符值。
准备查询:
a。从基本的 SELECT * 查询开始。
b.如果有条件,请添加带有动态表达式的 WHERE 子句。
绑定参数并执行:
a.使用 splat 运算符 (...) 将参数数组绑定到准备好的语句。
b.执行语句并检索结果(如果有)。
示例代码:
$string = "Bill N_d Dave";
$conditions = [];
$parameters = [''];
foreach (array_unique(explode(' ', $string)) 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";
}附加说明:
以上是如何使用可变的 LIKE 条件构建安全的 MySQLi 预准备语句?的详细内容。更多信息请关注PHP中文网其他相关文章!