我有一个查询(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 ')');

一切顺利。你能告诉我为什么准备好的语句没有考虑带逗号的内爆表吗?

最佳答案

因为comment字段不允许写得那么好,这里有一个答案,它只是一个注释:
假设你有两个身份证:

$name = $pdo->prepare('SELECT id, name FROM table WHERE id IN ( :id1, :id2 )');

假设你有三个身份证:
$name = $pdo->prepare('SELECT id, name FROM table WHERE id IN ( :id1, :id2, :id3 )');

你看到图案了吗?你的值和你的id一样多。制定prepare语句,并根据您拥有的id数量执行bind语句。
所以答案是:你需要改变你的代码,让它真正反映出你想要处理的id的数量。MySQL服务器不会神奇地将字符串中逗号分隔的列表解释为多个id。相反,您需要告诉服务器每个ID。

10-02 00:49
查看更多