Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP绑定通配符_Php_Mysql_Sql_Mysqli_Prepared Statement - Fatal编程技术网

PHP绑定通配符

PHP绑定通配符,php,mysql,sql,mysqli,prepared-statement,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中绑定参数。我发现它在创建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]: 变量数与准备中的参数数不匹配 第行程序名称中的语句

有人能告诉我如何解决这个问题吗?
多谢各位

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

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

您可以这样做:

$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语句下面使用 你的名字怎么样?或者c.城市的名字怎么样

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

每个绑定变量有一个问号。 例如 准备从项目名称类似的项目中选择项目名称?你喜欢什么名字?和 准备好的语句的好处是,您不需要担心引用变量

然后绑定所有参数,如
绑定参数…,$param1,$param2

你想试试吗?然后绑定_param%.$string.%或类似“%”| |?| |“%”。谢谢你的回复。我在查询中的where子句中使用了相同的变量两次,如下所示-where s2.subject_名称(如“%$keyword%”)或c.city_名称(如“%$keyword%”)。那么您能告诉我如何绑定这些变量吗。@TharangaNuwan我已经根据您的评论更新了答案,请参见下文。这不会留下安全漏洞。特别是,如果$var='hello%world',您有一个意外的占位符标记。
   $sql="SELECT item_title FROM item WHERE item_title LIKE concat ('%',?,'%') ";