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错误:“SQLSTATEHY000: General error”...
发布于 2018-07-25 05:40:54
终于来了!
这太愚蠢了。不知道该怪谁。它毁了我整个晚上,事实证明我只是在使用Count
作为我的一个专栏的别名。不知何故,PDO不喜欢这样,因此删除了结果集的第一行。我非常确定这种意外行为会有一个合理的解释,因为MySQL不介意这个别名。
无论如何,将Count
更改为RowCount
或其他任何值都可以修复该行为。
希望这对以后的人有所帮助。
感谢每一个和我一起工作的人。
https://stackoverflow.com/questions/51506155
复制相似问题