execute()
语句是否执行隐式fetch()
? PHP不会在以下简单代码中显示返回结果的第一行:
$query = 'CALL `MySP`()';
$stmt = $db->prepare($query);
$stmt->execute();
$rows = $stmt->fetchAll();
return $rows;
$rows
仅包含3行,而不是实际的4行;第一个失踪了。直接运行时,同一SP将返回4行。
尝试完注释中建议的所有内容后,还没有运气。此外,我发现PDO对于非常简单的SP也会失败。这是一个示例:
CREATE PROCEDURE `Test`()
BEGIN
SELECT 123 as Col1
UNION ALL
SELECT 456 as Col1;
END
尝试从PHP调用此proc。当您尝试获取时,PDO会抛出“无头绪”异常:
PDO错误:“ SQLSTATE [HY000]:一般错误” ...
答案 0 :(得分:0)
最后!
这太愚蠢了。不知道该怪谁。它毁了我一整晚,事实证明我只是在使用Count
作为其中一列的别名。 PDO不喜欢这种方式,因此删除了结果集的第一行。我很确定会有这种意外行为的合乎逻辑的解释,因为MySQL不介意此别名。
无论如何将Count
更改为RowCount
或其他任何方法都可以解决此问题。
希望这可以帮助某人。
谢谢与我合作的每一个人。