MySQL程序没有返回第一行

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (97)

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]:常规错误”...

提问于
用户回答回答于

最后!

这太愚蠢了。不确定是谁应该受到责备。它破坏了我的整个晚上,事实证明我正在使用Count我的一个列的别名。PDO不知何故不喜欢这样,结果删除了结果集的第一行。我很确定这种意外行为会有合理的解释,因为MySQL并不介意这个别名。

不管怎样改变Count,以RowCount或其他任何固定的行为。

希望这可以帮助有人在路上。

谢谢大家和我一起工作的人。

扫码关注云+社区

领取腾讯云代金券