【发布时间】:2012-04-13 00:20:12
【问题描述】:
我有一个查询(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 ')');
一切顺利。你能告诉我为什么准备好的语句不考虑带逗号的内爆表吗?
【问题讨论】:
-
两个参数不是一个参数;
bindValue是一个参数。如果该值包含两个参数的值,则说明您使用了错误的工具。是的,这已经被问过了。IN ()加上准备好的语句,例如这里是可变数量的参数和 PDO 的示例:stackoverflow.com/a/7128193/367456 -
我已经阅读了您提供的链接,但它仍然没有让我在解决问题的路上。对我来说,“绑定”是我之前提出的查询的变量。而我这种情况下的字符串 '6, 52' 只是 mysql 查询中位于 ( 和 ) 之间的另一个字符串。我没有看到它是两个、三个和更多参数.. 不知道为什么我应该在这个级别上将它视为 2 或更多。抱歉 - 我是 pdo 的新手
标签: php mysql pdo prepared-statement