0

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

$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
4

3 回答 3

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);
于 2012-11-21T08:14:39.123 回答
0

您的绑定值有错误。

$stmt->bindValue(':tags', 'one, two, three');

应该

$stmt->bindValue(':tags', "'one', 'two', 'three'");
于 2012-11-21T07:45:00.143 回答
-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 有点违背了绑定的原始目的,并且绑定了字符串化数组而不是原始数组。

于 2012-11-21T07:49:26.387 回答