我有一个查询(PHP,Mysql)一个名为"table"的表,看起来像这样:
id | name
-------------
6 | abc
10| xxx
52| def
和一个查询:
$ids = '5,62'
$name = $pdo -> prepare('SELECT id, name FROM table WHERE id IN ( :ids )');
$name -> bindValue(':ids', $ids, PDO::PARAM_STR);
$name -> execute();
$name = $name->fetchAll(PDO::FETCH_ASSOC);
print_r($nazwa);
我希望得到这样的结果
id | name
-------------
6 | abc
52| def
毫无疑问,我只得到:
id | name
-------------
6 | abc
好像第二个值会被忽略。如果我将查询更改为:
$name = $pdo -> prepare('SELECT id, name FROM table WHERE id IN (' $ids ')');
一切顺利。你能告诉我为什么准备好的陈述不考虑带逗号的内爆表吗?
因为注释字段不允许写得那么好,所以这里有一个答案只是一个注释:
假设您有两个 ID:
$name = $pdo->prepare('SELECT id, name FROM table WHERE id IN ( :id1, :id2 )');
假设您有三个 ID:
$name = $pdo->prepare('SELECT id, name FROM table WHERE id IN ( :id1, :id2, :id3 )');
你看到模式了吗?您拥有的值与拥有 ID 一样多的值。制定 prepare 语句,并根据您拥有的 ID 数执行绑定语句。
所以答案是:你需要改变你的代码,让它真正反映你想要处理的ID数量。MySQL服务器不会神奇地将字符串中的逗号分隔列表解释为多个ID。相反,您需要告诉服务器每个 ID。