PHP-使用concat时PDO出现问题

PHP-使用concat时PDO出现问题,php,pdo,Php,Pdo,我有以下代码不起作用,我不明白为什么 有人能帮我解决PDO的微妙之处吗 <?php $stmt = $con->prepare("SELECT DISTINCT title FROM articles WHERE concat(id,'-',value) IN (?)"); $stmt->bindParam(1, $concat); //Works $concat = "1-4"; $stmt->execute(); $results = $stmt->fetc

我有以下代码不起作用,我不明白为什么

有人能帮我解决PDO的微妙之处吗

<?php

$stmt = $con->prepare("SELECT DISTINCT title FROM articles WHERE concat(id,'-',value) IN (?)");
$stmt->bindParam(1, $concat);

//Works
$concat = "1-4";
$stmt->execute();
$results = $stmt->fetchAll();
var_dump($results);

//Does not work
$concat = "'1-4','1-5'";
$stmt->execute();
$results = $stmt->fetchAll();
var_dump($results);

绑定的值用作单个字符串参数。因此,第二次不提供列表时,您提供的是一个包含逗号的字符串

如果要“翻译”在数据库级别执行的查询,您将有:

SELECT DISTINCT title FROM articles WHERE concat(id, '-', value) IN ("1-4")
这是一个有效的SQL查询。但第二次你会有类似的东西:

SELECT DISTINCT title FROM articles WHERE concat(id, '-', value) IN ("'1-4', '1-5'")

由于没有连接等于列表中的唯一元素('1-4','1-5'),因此不会得到任何结果

这可能很有用:那么,与PDO没有链接?我已经试着硬编码这个变量,它是有效的。这是因为查询是正确的,但它不是您所期望的。实际上,您正在与一个值为
'1-4',1-5'
的元素列表进行比较。我明白了,请核对我发的答案。你知道有什么方法可以克服它吗?如果你绝对确定字符串是“干净的”,并且它只有格式中的元素,你可以将它连接到查询中。或者,最好/最安全的解决方案可能是添加可变数量的占位符(?符号),迭代元素数组并绑定每个元素事实上,这些1-4、1-5等来自CSV文件。在发送到查询之前,我对它进行了浓缩。我认为您的可变占位符数可能是最好的解决方案,但我不知道如何使用它p但是我会搜索的,谢谢你的快速回复!我在谷歌上搜索了“pdo绑定元素列表”,我发现了这样一条线索:你可能会在那里找到一些帮助。。DonamiTest补充的答案与我的建议非常相似。问题是,我只准备了一次查询。我的意思是,我的CSV文件中有几行,我在每行上应用脚本,每行都有一个“concat”值变量。