我的这个查询没有返回任何内容。它不会抛出任何错误。在此网站上找不到解决方案。这里出了什么问题?
$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发布于 2012-11-21 15:49:26
尝试使用PDO::bindParam。
$query = "SELECT * FROM `votes` WHERE `tags` IN (:tags)";
$stmt = $dbh->prepare($query);
$stmt->bindParam(':tags', implode(",", array('one, two, three')));
$stmt->execute();尽管使用内爆有点违背了bind的初衷,而且绑定的是字符串化的数组,而不是原始数组。
发布于 2012-11-21 16:14:39
不管您使用的是bindParam()还是bindValue(),这都不会做您想做的事情。
SQL查询参数仅代替一个值。您不能绑定一个包含逗号的字符串并将其解释为多个值。对于列表中的每个不同值,都需要一个参数占位符。
而且,使用PDO根本不需要绑定参数值。您可以传递一个数组来执行()。在本例中,我将使用位置参数而不是命名参数。PDO支持两者,但不要在一个查询中混合使用它们。
$query = "SELECT * FROM `votes` WHERE `tags` IN (?, ?, ?)";
$stmt = $dbh->prepare($query);
$params = explode(', ', 'one, two, three');
$stmt->execute($params);发布于 2012-11-21 15:45:00
您的绑定值有错误。
$stmt->bindValue(':tags', 'one, two, three');应该是
$stmt->bindValue(':tags', "'one', 'two', 'three'");https://stackoverflow.com/questions/13488423
复制相似问题