Процедура MySQL не возвращает первую строку

Выполняет ли 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

Попробуйте вызвать этот proc с PHP. PDO выбрасывает исключение «без ключа» при попытке извлечь:

Ошибка PDO: «SQLSTATE [HY000]: общая ошибка a €? ...

php,mysql,stored-procedures,pdo,

0

Ответов: 1


0

В заключение!

Это так глупо. Не уверен, кто виноват. Это разрушило всю мою ночь и оказалось тем, что я использовал Countпсевдоним для одной из моих колонок. PDO каким-то образом не нравится, и в результате удаляет первую строку набора результатов. Я уверен, что будет логическое объяснение этого неожиданного поведения, поскольку MySQL не против этого псевдонима.

В любом случае изменения Countк RowCountили что - либо другое фиксированное поведение.

Надеюсь, это поможет кому-то по дороге.

Спасибо всем, кто работал со мной по этому поводу.

PHP, MySQL, хранимая-процедура, PDO,
Похожие вопросы