我很难过。请考虑以下测试表:
----------------
| art_projects |
----------------------------------
| project_name | project_creator |
|--------------|-----------------|
| Flying Feet | 1 |
| Dinosaurs | 2 |
| Roadblock | 1 |
----------------------------------
与它配对,请考虑以下代码(其中$db
是已确认功能的PDO实例):
$dbObj = $db->prepare("SELECT * FROM art_projects WHERE project_creator = ?");
$dbObj->execute([1]);
print_r($dbObj->fetchAll(PDO::FETCH_ASSOC));
很简单,很少会出错。它按预期运行并返回以下结果集:
----------------------------------
| project_name | project_creator |
|--------------|-----------------|
| Flying Feet | 1 |
| Roadblock | 1 |
----------------------------------
问题开始的地方。如果我更改execute()
以搜索ID 2而不是1,我预计它会返回Dinosaurs
的单行结果。它没有 - 我得到了这个:
1
但是,当我将$dbObj->fetchAll(...)
更改为$dbObj->fetch(...)
时,我会获得预期的单行结果。哎......?
现在,我对PDO很陌生,但我认为这是预期的行为;我似乎无法在Google或其他地方找到任何与此相关的错误信息。有人可以向我解释这种行为吗?
此外,是否有一种可接受/有效的方法来处理这个问题?恕我直言,它是一种Catch-22来测试结果集的长度是为了使用正确的获取方法,并且神奇地知道你的结果集何时是单一的是不合理的 - 或多行。
答案 0 :(得分:1)
FETCH_ASSOC
不是PDO::FetchAll()
的有效记录模式。当它获得多个结果集行时,它可能正在填充一个消除内容的关联数组。
如果我是你,我会循环并按行进行普通fetch()
调用一次。