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/sea​​rch.php 中的绑定变量数不匹配” 修复了,可以去掉mysqli_stmt_bind_param中的$searchStr参数。忘记了。 对不起兄弟不能给你代表我只有可怜的 6 次代表): 我已根据您的建议进行了修改。不知何故,当我专门搜索“oracle”时,我只能设法从我的 sql 数据库中提取数据。我的代码有什么问题吗?谢谢。 嗯,它会搜索$_POST["searchstr"] 中的任何内容。我看不到这部分代码。也许我不能帮助你,实际上我不是程序员,我更多的是 SQL 和数据库的人。在我的回答中,我只是在猜测。由于您的问题与原始问题不同,因此最好创建一个新问题。看,我们投入工作来回答你的问题,然后编辑问题以调整一个全新的问题在这里被认为是一种粗鲁。

以上是关于mySqli 使用通配符绑定参数 LIKE的主要内容,如果未能解决你的问题,请参考以下文章

为啥 HttpListener 在侦听强通配符 (http://+:port) http.sys/urlacl 绑定时“与现有注册冲突”?

在 Ruby 中将 UDP 套接字绑定到通配符主机

SQL中like里怎么使用输入参数

SQL like

如何使用 C# 在 MS-Access 中的查询中使用带有通配符的 LIKE 运算符

08 使用通配符进行过滤 - like