首页 >数据库 >mysql教程 >如何安全地使用 MySQL 的 LIKE '%{$var}%' 和预处理语句?

如何安全地使用 MySQL 的 LIKE '%{$var}%' 和预处理语句?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-16 10:52:59883浏览

How Can I Safely Use MySQL's LIKE '%{$var}%' with Prepared Statements?

保护您的数据库:在准备好的语句中正确使用 LIKE '%{$var}%'

构建响应用户输入的动态搜索功能需要仔细考虑安全性。 一个常见的场景是使用 MySQL 的 LIKE 运算符搜索包含部分匹配的用户名。 但是,直接将用户输入合并到准备好的语句中的 LIKE 子句中很容易出现 SQL 注入漏洞。

不正确的方法通常涉及尝试在 LIKE 通配符中嵌入占位符,例如 SELECT * FROM users WHERE username LIKE '%{?}%'。这是有缺陷的,因为数据库驱动程序无法正确解释占位符语法。

安全实现的关键在于LIKE准备语句之前构建表达式。这可确保用户输入得到正确的清理并被视为数据,而不是可执行代码。 正确的方法是:

<code class="language-php">$searchParam = "%" . $yourParam . "%"; // Prepend and append wildcards
$stmt = $mysqli->prepare("SELECT * FROM REGISTRY WHERE name LIKE ?");
$stmt->bind_param("s", $searchParam); // Bind the complete LIKE expression
$stmt->execute();</code>

在这个改进的示例中,% 通配符被添加到用户提供的 $yourParam 中,以创建存储在 LIKE 中的完整 $searchParam 模式。 然后使用带有字符串类型(“s”)的 bind_param 将这个完整的模式绑定到准备好的语句的占位符。 这可以防止 SQL 注入,同时保持动态搜索功能。 这种方法保证了准备好的语句所提供的安全性和效率。

以上是如何安全地使用 MySQL 的 LIKE '%{$var}%' 和预处理语句?的详细内容。更多信息请关注PHP中文网其他相关文章!

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