【问题标题】:PHP Binding a WildcardPHP 绑定通配符
【发布时间】:2013-01-30 02:09:16
【问题描述】:

当多字符通配符需要在变量值旁边时,希望有人能帮助我了解如何在 mysqli 中绑定参数。我发现它在创建 SQL 语句时对我有用,如下所示:

$sql = "SELECT item_title FROM item WHERE item_title LIKE '%$title%'";

但是,我尝试按照相同的模式绑定变量,发现它失败了。他们使用了这个代码:

$sql = "SELECT item_title FROM item WHERE item_title LIKE '%?%'";

它引发了这个错误:

警告:mysqli_stmt_bind_param() [function.mysqli-stmt-bind-param]: 变量数与准备好的参数数不匹配 在线program_name中的语句......

谁能告诉我如何解决这个问题? 谢谢你。

【问题讨论】:

  • 尝试LIKE ? 然后bind_param("%".$string."%")LIKE '%' || ? || '%'

标签: php mysql sql mysqli prepared-statement


【解决方案1】:

每个绑定变量有一个问号。 例如 prepare(SELECT item_title FROM item WHERE item_title LIKE ? and name2 like ? and ...) 准备好的语句的好处是您不必担心引用变量。

然后绑定所有参数,如 bind_param("ss...", $param1, $param2, ....);

【讨论】:

    【解决方案2】:
       $sql="SELECT item_title FROM item WHERE item_title LIKE concat ('%',?,'%') ";
    

    【讨论】:

      【解决方案3】:

      你可以这样做:

      $sql = "SELECT item_title FROM item WHERE item_title LIKE ? ";
      

      然后

      $title_new =  '%'.$title.'%';
      mysqli_stmt_bind_param($stmt, 's', $title_new);    
      

      根据用户评论更新

      下面的SQL实现

       s2.subject_name LIKE '%$keyword%' OR c.city_name LIKE '%$keyword%' 
      

      下面使用MySqli语句 s2.subject_name 喜欢吗?或 c.city_name LIKE ?

       $keyword = '%'.$keyword.'%';
       mysqli_stmt_bind_param($stmt, 'ss', $keyword, $keyword);
      

      【讨论】:

        【解决方案4】:

        您只能绑定数据文字,不能绑定任意查询部分。
        所以,首先准备你的文字

        $var = "%$var%";
        $sql = "SELECT item_title FROM item WHERE item_title LIKE ?";
        

        【讨论】:

        • 感谢您的回复。我在查询的 where 子句中使用了相同的变量两次,就像这样 - WHERE (s2.subject_name LIKE '%$keyword%' OR c.city_name LIKE '%$keyword%' )。那你能告诉我我是怎么绑定这个变量的吗?
        • @TharangaNuwan 我已经根据您的 cmets 更新了答案,见下文
        • 这不会留下安全漏洞。特别是如果 $var = 'hello%world' 你有一个意外的占位符标记。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-10
        • 1970-01-01
        • 1970-01-01
        • 2013-09-18
        • 2014-12-20
        相关资源
        最近更新 更多