我有一个查询(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 一样多。根据您拥有的 ID 数量制定准备语句并执行绑定(bind)语句。
所以答案是:您需要更改您的代码,以便它实际反射(reflect)您要处理的 ID 数量。 MySQL 服务器不会神奇地将字符串中的逗号分隔列表解释为多个 ID。相反,您需要将每个 ID 告知服务器。
关于php - pdo - 准备好的语句丢失数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10133661/