首页 > 数据库 > mysql教程 > 如何在 PHP 中安全地使用带有 LIKE 查询的预准备语句?

如何在 PHP 中安全地使用带有 LIKE 查询的预准备语句?

Linda Hamilton
发布: 2025-01-16 11:07:57
原创
553 人浏览过

How to Safely Use Prepared Statements with LIKE Queries in PHP?

理解预处理语句和 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板