首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP PDO bindValue使用MySQL IN()?

PHP PDO bindValue使用MySQL IN()?
EN

Stack Overflow用户
提问于 2012-11-21 15:38:37
回答 3查看 6.5K关注 0票数 0

我的这个查询没有返回任何内容。它不会抛出任何错误。在此网站上找不到解决方案。这里出了什么问题?

代码语言:javascript
复制
$query = "SELECT * FROM `votes` WHERE `tags` IN (:tags)";
$stmt = $dbh->prepare($query);
$stmt->bindValue(':tags', 'one, two, three');
$stmt->execute();
// 0 results, should be more
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-21 15:49:26

尝试使用PDO::bindParam

代码语言:javascript
复制
$query = "SELECT * FROM `votes` WHERE `tags` IN (:tags)";
$stmt = $dbh->prepare($query);
$stmt->bindParam(':tags', implode(",", array('one, two, three')));
$stmt->execute();

尽管使用内爆有点违背了bind的初衷,而且绑定的是字符串化的数组,而不是原始数组。

票数 -3
EN

Stack Overflow用户

发布于 2012-11-21 16:14:39

不管您使用的是bindParam()还是bindValue(),这都不会做您想做的事情。

SQL查询参数仅代替一个值。您不能绑定一个包含逗号的字符串并将其解释为多个值。对于列表中的每个不同值,都需要一个参数占位符。

而且,使用PDO根本不需要绑定参数值。您可以传递一个数组来执行()。在本例中,我将使用位置参数而不是命名参数。PDO支持两者,但不要在一个查询中混合使用它们。

代码语言:javascript
复制
$query = "SELECT * FROM `votes` WHERE `tags` IN (?, ?, ?)";
$stmt = $dbh->prepare($query);
$params = explode(', ', 'one, two, three');
$stmt->execute($params);
票数 3
EN

Stack Overflow用户

发布于 2012-11-21 15:45:00

您的绑定值有错误。

代码语言:javascript
复制
$stmt->bindValue(':tags', 'one, two, three');

应该是

代码语言:javascript
复制
$stmt->bindValue(':tags', "'one', 'two', 'three'");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13488423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档