PHP:PDO查询不返回结果,但在phpmyadmin中同样的查询返回4个结果?
Posted
技术标签:
【中文标题】PHP:PDO查询不返回结果,但在phpmyadmin中同样的查询返回4个结果?【英文标题】:PHP: PDO Query returns no results, but the same query returns 4 results in phpmyadmin? 【发布时间】:2015-06-18 17:02:12 【问题描述】:我编写了一个查询来返回帖子的所有 cmets,不包括该帖子中被阻止的用户。我已经在 phpmyadmin 中测试了查询,对于给定的帖子(其中 1 个用户被阻止),我得到了 4/5 可能的 cmets。
查询看起来像:
$query = "SELECT ent.Entity_Id, ent.Profile_Pic_Url, ent.First_Name, ent.Last_Name, ent.Last_CheckIn_Place, comments.Content
FROM checkin_comments AS comments
JOIN entity AS ent
ON comments.Entity_Id = ent.Entity_Id
LEFT JOIN friends AS f
ON ent.Entity_Id = :entityId
WHERE comments.Chk_Id = :checkInId
AND f.Category != 4
GROUP BY comments.Comment_Id
";
// Bind the parameters to the query
$data = Array(":checkInId" => (int)$checkInId, ":entityId" => (int)$userId);
如果我在 phpmyadmin 上使用 checkinId 值 1726
和 userId 值 1517
运行查询,我会得到预期的结果,但是在 PHP 中我得到 0 个结果。我使用 var_dump 打印数据的内容,它显示为:
array(2)
[":checkInId"]=>
int(1726)
[":entityId"]=>
int(1517)
为什么我在 PHP 中遇到不同的结果?我所有其他查询都运行良好
编辑如果我将绑定变量换成数字值,则查询工作正常,这使我相信这是 PDO 将值绑定到查询的问题。当我执行绑定时,我使用执行以下方法的 PDO 包装类:
public function fetchAll($query, $data = null)
$stmt = $this->prepareQuery($query, $data);
return $stmt->fetchAll();
private function prepareQuery($query, $data = null)
$stmt = $this->connection->prepare($query);
$stmt->execute($data);
return $stmt;
这是否为任何更有经验的 PDO 用户提供了答案?
【问题讨论】:
您写道:checkinId 的值为 1726,userId 的值为 1527,但您绑定的是 1517 你在哪里实际准备和执行这个查询?仅仅分配给$data
是不够的。
我写了一个简单的 pdo 包装器。我知道你会认为这个问题很有必要,但我有大约 20 个其他查询在同一个包装器上运行,它们返回得很好。
“准备”查询和/或执行是否有任何错误?可能值得将该查询复制并粘贴到“sql ide”中,以确保其中没有无效字符。您可以随时向SQLFiddle 提供一些测试数据,我们可以在我们的机器上尝试完全相同的代码?
我从来没有遇到任何错误。下班回来我会做一个 Sql fiddle
【参考方案1】:
我认为您没有将参数包含在单引号中。试试这个代码
$query = "SELECT `ent`.`Entity_Id`, `ent`.`Profile_Pic_Url`, `ent`.`First_Name`, `ent`.`Last_Name`, `ent`.`Last_CheckIn_Place`, `comments`.`Content`
FROM `checkin_comments` AS `comments`
JOIN `entity` AS `ent`
ON `comments`.`Entity_Id` = `ent`.`Entity_Id`
LEFT JOIN `friends` AS `f`
ON `ent`.`Entity_Id` = ':entityId'
WHERE `comments`.`Chk_Id` = ':checkInId'
AND `f`.`Category` != 4
GROUP BY `comments`.`Comment_Id`
";
// Bind the parameters to the query
$data = Array(":checkInId" => (int)$checkInId, ":entityId" => (int)$userId);
我希望这会有所帮助。
【讨论】:
如有必要,会引用 PDO 的占位符。添加这样的引号可能会导致双重转义,并且在任何情况下都是毫无意义的。不要这样做。以上是关于PHP:PDO查询不返回结果,但在phpmyadmin中同样的查询返回4个结果?的主要内容,如果未能解决你的问题,请参考以下文章
mysql“日期之间”查询在 phpmyadmin 中有效,但 PDO 不返回任何内容