希望当有多个字符通配符需要在变量值旁边时,有人会帮我解释如何在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上的声明......
有谁能告诉我如何解决这个问题? 谢谢。
答案 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,....);