mySqli 使用通配符绑定参数 LIKE
Posted
技术标签:
【中文标题】mySqli 使用通配符绑定参数 LIKE【英文标题】:mySqli Bind Parameter LIKE with Wildcard 【发布时间】:2014-12-20 00:10:03 【问题描述】:我在将 LIKE
与通配符绑定到我在 mysqli 中准备好的语句中时遇到问题。我尝试了以下两种方法,如图所示& concat。(使用@fancyPants 输入更新)
有没有办法让我可以在绑定发生后查看自己的 SQL 语句?
如何正确绑定才能得到我想要的结果?
它可以在没有 LIKE 语句的情况下工作。
我只能从使用某个搜索词中提取数据。我的代码有什么问题吗?
$str = $_POST["searchstr"];
if(isset($_POST['submit']))
$price=$_POST['price'];
if(!empty($_POST['chkbx']))
foreach($_POST['chkbx'] as $selected)
$sql= 'SELECT bookTitle, bookPrice FROM nbc_book WHERE catID LIKE "%'.$selected.'%" AND bookTitle LIKE "%'.$str.'%" AND bookPrice < ?';
$stmt=mysqli_prepare($con,$sql);
mysqli_stmt_bind_param($stmt,"i",$price);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $bookTitle, $bookPrice);
while ($stmt->fetch())
echo $bookTitle.$bookPrice."<br>";
【问题讨论】:
【参考方案1】:$searchStr = 'oracle';
$sql= 'SELECT bookTitle, bookPrice FROM nbc_book WHERE catID LIKE ? AND bookTitle LIKE "%'.$searchStr.'%" AND bookPrice < ?';
$stmt=mysqli_prepare($con,$sql);
mysqli_stmt_bind_param($stmt,"ssi",$selected,$price);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $bookTitle, $bookPrice);
while ($stmt->fetch())
echo $bookTitle;
【讨论】:
用您的输入更新了代码,但它给出了这个错误。 “警告:mysqli_stmt_bind_param() [function.mysqli-stmt-bind-param]:类型定义字符串中的元素数与第 108 行 /var/www/search.php 中的绑定变量数不匹配” 修复了,可以去掉mysqli_stmt_bind_param
中的$searchStr
参数。忘记了。
对不起兄弟不能给你代表我只有可怜的 6 次代表):
我已根据您的建议进行了修改。不知何故,当我专门搜索“oracle”时,我只能设法从我的 sql 数据库中提取数据。我的代码有什么问题吗?谢谢。
嗯,它会搜索$_POST["searchstr"]
中的任何内容。我看不到这部分代码。也许我不能帮助你,实际上我不是程序员,我更多的是 SQL 和数据库的人。在我的回答中,我只是在猜测。由于您的问题与原始问题不同,因此最好创建一个新问题。看,我们投入工作来回答你的问题,然后编辑问题以调整一个全新的问题在这里被认为是一种粗鲁。以上是关于mySqli 使用通配符绑定参数 LIKE的主要内容,如果未能解决你的问题,请参考以下文章
为啥 HttpListener 在侦听强通配符 (http://+:port) http.sys/urlacl 绑定时“与现有注册冲突”?