PHP绑定通配符

时间:2013-02-14 09:53:54

标签: php mysql sql mysqli prepared-statement

希望当有多个字符通配符需要在变量值旁边时,有人会帮我解释如何在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上的声明......

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

4 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

你可以这样做:

$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喜欢?

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

答案 2 :(得分:1)

   $sql="SELECT item_title FROM item WHERE item_title LIKE concat ('%',?,'%') ";

答案 3 :(得分:0)

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

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

相关问题