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