MySQL过程不返回第一行

时间:2018-07-24 19:23:59

标签: php mysql stored-procedures pdo

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]:一般错误” ...

1 个答案:

答案 0 :(得分:0)

最后!

这太愚蠢了。不知道该怪谁。它毁了我一整晚,事实证明我只是在使用Count作为其中一列的别名。 PDO不喜欢这种方式,因此删除了结果集的第一行。我很确定会有这种意外行为的合乎逻辑的解释,因为MySQL不介意此别名。

无论如何将Count更改为RowCount或其他任何方法都可以解决此问题。

希望这可以帮助某人。

谢谢与我合作的每一个人。