理解预处理语句和 LIKE 查询
在 PHP 中,使用预处理语句进行 LIKE 查询时,必须小心处理字符串参数,以避免潜在错误。预处理语句利用占位符 (?) 来防止 SQL 注入,同时提高性能。
情况一:使用 '%{$var}%' 匹配用户名
以下代码:
<code class="language-php">$sql = 'SELECT * FROM `users` WHERE username LIKE \'%{?}%\' ';</code>
会引发错误,因为占位符 ? 在预处理的 SQL 语句中没有正确定义。
情况二:使用 %{?}% 匹配用户名
以下代码:
<code class="language-php">$sql = 'SELECT * FROM `users` WHERE username LIKE %{?}% ';</code>
同样会失败,因为语法无效。百分号 (%) 不能直接用作预处理语句中的占位符。
解决方案:使用连接的 LIKE 变量
要解决此问题,请使用连接的 LIKE 变量:
<code class="language-php">$likeVar = "%" . $yourParam . "%"; $stmt = $mysqli->prepare("SELECT * FROM REGISTRY where name LIKE ?"); $stmt->bind_param("s", $likeVar); $stmt->execute();</code>
在此示例中,$likeVar 通过将百分号与用户输入 $yourParam 组合来构建。LIKE 条件然后使用 ? 占位符,该占位符在参数绑定期间绑定到连接的字符串 $likeVar。
这种方法确保百分号被视为文字字符,而不是预处理语句中的语法元素。它还允许通过确保 $likeVar 包含正确的通配符来进行不区分大小写的搜索。
以上是如何在 PHP 中安全地使用带有 LIKE 查询的预准备语句?的详细内容。更多信息请关注PHP中文网其他相关文章!