在准备好的语句中使用 LIKE '%$var%' 的正确方法? [mysqli]
Posted
技术标签:
【中文标题】在准备好的语句中使用 LIKE \'%$var%\' 的正确方法? [mysqli]【英文标题】:Correct way to use LIKE '%$var%' with prepared statements? [mysqli]在准备好的语句中使用 LIKE '%$var%' 的正确方法? [mysqli] 【发布时间】:2015-04-07 17:44:07 【问题描述】:这不起作用
$sql = 'SELECT * FROM `users` WHERE username LIKE \'%?%\' ';
警告:mysqli_stmt::bind_param():变量数与第 1 行 /home/rgero/public_html/php/searchadmins.php 中准备好的语句中的参数数不匹配
这个也不行
$sql = 'SELECT * FROM `users` WHERE username LIKE %?% ';
致命错误:错误的 SQL:SELECT * FROM users
WHERE username LIKE %?% Error: 0 in /home/rgero/public_html/php/searchadmins.php on line 1
我该怎么办?我正在尝试搜索玩家功能,该功能会在您输入表单时更新结果,就像谷歌在您输入时已经显示答案一样。如果您键入 dm,我需要用户名 Admin 以在包含“dm”的其他用户名中显示它。它也应该不区分大小写
【问题讨论】:
您必须在要绑定到?
参数的变量上预先添加%
。
是的,只需在查询中使用bindParam(1, "%$var%")
等和文字LIKE ?
。
所以我必须取变量并将 % 添加到开头并添加 % 到末尾?
@mario 我只是不想让未来的读者产生错误的印象,有些人甚至可能认为他们可以混合不同的 API lol - 我见过多少次了.
我只是在回复,因为我收到了有关这些 cmets 的通知。我认为您应该权衡这些“重复”主题获得的观看次数。考虑到谷歌应该惩罚重复内容的事实,并且不知何故仍有几千人在这里结束,这意味着我使用了不同的关键字,这个问题首先出现。如果这在没有答案的情况下关闭,那将意味着 SO 有 3k 次反弹命中。我知道当问题很新鲜但有迹象表明这个问题时,不可能检测到这一点。
【参考方案1】:
试试这个
$likeVar = "%" . $yourParam . "%";
$stmt = $mysqli->prepare("SELECT * FROM REGISTRY where name LIKE ?");
$stmt->bind_param("s", $likeVar);
$stmt->execute();
您只需使用?
准备查询,然后使用bind_param
绑定参数。
【讨论】:
以上是关于在准备好的语句中使用 LIKE '%$var%' 的正确方法? [mysqli]的主要内容,如果未能解决你的问题,请参考以下文章
Golang 中的跨数据库准备好的语句绑定(like 和 where in)