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
?@堆栈在这种情况下,你必须取出整个部分。或者,更确切地说,有条件地添加它