Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.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 当存在其他占位符时,如何在IN()子句中使用占位符?_Php_Mysql_Pdo_Parameter Passing - Fatal编程技术网

Php 当存在其他占位符时,如何在IN()子句中使用占位符?

Php 当存在其他占位符时,如何在IN()子句中使用占位符?,php,mysql,pdo,parameter-passing,Php,Mysql,Pdo,Parameter Passing,这是我的密码: $selected_tags_arr = ["PHP", "CSS", "JAVA"]; $part_of_tag = "MyS"; $in = str_repeat('?,', count($selected_tags_arr) - 1) . '?'; $stmt = $dbh_conn->prepare("SELECT name, usage_guidance, total_used_num FROM tags

这是我的密码:

$selected_tags_arr = ["PHP", "CSS", "JAVA"];
$part_of_tag = "MyS";
$in  = str_repeat('?,', count($selected_tags_arr) - 1) . '?';
$stmt = $dbh_conn->prepare("SELECT name, usage_guidance, total_used_num
                            FROM tags
                            WHERE
                            ( name LIKE CONCAT('%', ?, '%') OR
                            usage_guidance LIKE CONCAT(?, '%') ) AND
                            name NOT IN ($in)");
$stmt->execute(array($part_of_tag, $part_of_tag, $selected_tags_arr));
$result = $stmt->fetchAll();
由于语法错误,它无法工作。我怎样才能修好它

如您所见,我需要传递一些其他参数(除了
$selected\u tags\u arr
数组)。这就是问题发生的时候


注意:有时可能
$selected\u tags\u arr
数组是空数组。

好的,因为没有人愿意提供示例。正如aynber所说,您需要合并数组。因此,以下代码应该可以:

$stmt->execute(array_merge([$part_of_tag,$part_of_tag], $selected_tags_arr));
但是,如果像您所说的,$selected_tags_arr可能为空,那么可能会出现问题。这将导致语法错误

补救办法取决于你想要的结果。如果希望在数组为空时查询不会找到任何内容,请按如下方式更改代码:

$in  = $selected_tags_arr ? str_repeat('?,', count($selected_tags_arr) - 1) . '?' : 'NULL';

您需要发布语法错误。代码还有其他问题,例如,
execute
需要的是平面数组,而不是矩阵。您正在数组中发送数组。首先尝试将
$selected\u tags\u arr
与其他变量合并到一个数组中。
在(列表)
中,除了gasp、ColdFusion之外,在每种语言中都很难参数化。Thx+1在大多数情况下都工作得很好,除非
$selected\u tags\u arr
数组等于空,如
[]
,在这种情况下,它不起作用,你知道我如何修复它吗?事实上我有这个想法。。但是当我设置
NULL
时,正如您所说,查询没有找到任何东西。。当数组为空时,我只想禁用查询的这一部分
和name NOT IN($IN)
。。那么你知道我应该设置什么而不是
NULL
?@堆栈在这种情况下,你必须取出整个部分。或者,更确切地说,有条件地添加它