我的这个查询什么都不返回。它不会引发任何错误。在这个网站上找不到解决方案。这有什么不对?
$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
答案 0 :(得分:3)
无论你使用bindParam()还是bindValue(),这都不会做你想要的。
SQL查询参数仅取代一个值。您不能绑定包含逗号的字符串,并将其解释为多个值。您需要为列表中的每个不同值添加一个参数占位符。
此外,您根本不需要使用PDO绑定参数值。您可以将数组传递给execute()。在这种情况下,我使用位置参数而不是命名参数。 PDO支持两者,但不要在一个查询中混合它们。
$query = "SELECT * FROM `votes` WHERE `tags` IN (?, ?, ?)";
$stmt = $dbh->prepare($query);
$params = explode(', ', 'one, two, three');
$stmt->execute($params);
答案 1 :(得分:1)
您的绑定值有错误。
$stmt->bindValue(':tags', 'one, two, three');
应该是
$stmt->bindValue(':tags', "'one', 'two', 'three'");
答案 2 :(得分:-3)
尝试使用PDO :: bindParam代替。
$query = "SELECT * FROM `votes` WHERE `tags` IN (:tags)";
$stmt = $dbh->prepare($query);
$stmt->bindParam(':tags', implode(",", array('one, two, three')));
$stmt->execute();
虽然使用implode有点击败了bind的最初目的,但是stringified数组被绑定而不是原始数组。