2013-02-14 81 views
2

希望当多字符通配符需要位于变量值的旁边时,有人会帮助我如何绑定mysqli中的参数。我发现它时创建一个SQL语句,像这样的工作对我来说:PHP绑定通配符

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

不过,我试图遵循同样的模式变量绑定,并发现它失败了。他们使用此代码:

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

它提出了这个错误:

Warning: mysqli_stmt_bind_param() [function.mysqli-stmt-bind-param]: Number of variables doesn't match number of parameters in prepared statement in program_name on line......

任何人能告诉我如何解决这个问题? 谢谢。

+0

尝试'LIKE?'然后'bind_param(“%”。$ string。“%”)'或'LIKE'%'|| ? || '%''。 – Passerby 2013-02-14 09:56:27

回答

4

您可以只绑定数据文字而不是任意查询部分。
所以,准备好您的文字第一

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

感谢您的回复。我在查询中的where子句中使用了两次相同的变量,像这样 - WHERE(s2.subject_name LIKE'%$ keyword%'或c.city_name LIKE'%$ keyword%')。那么你能告诉我如何绑定这个变量。 – TNK 2013-02-14 10:20:07

+0

@TharangaNuwan我已根据您的意见更新了答案,请参阅下文 – Minesh 2013-02-14 10:34:14

2

你可以不喜欢这样说:

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

然后

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

更新根据用户的评论

要实施贝洛w ^下面的SQL语句mysqli的

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

使用s2.subject_name什么样的? OR c.city_name LIKE?

$keyword = '%'.$keyword.'%'; 
mysqli_stmt_bind_param($stmt, 'ss', $keyword, $keyword); 
1
$sql="SELECT item_title FROM item WHERE item_title LIKE concat ('%',?,'%') "; 
0

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

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