Процедура, созданная из PDO, имеет нулевое тело - PullRequest
0 голосов
/ 05 марта 2019

У меня проблемы с написанием скрипта для успешного создания хранимой процедуры через PDO. Когда я пытаюсь создать процедуру, тело процедуры - NULL. В каких случаях тело процедуры может быть NULL?

Конфигурация моего сервера:

Apache v2.4.33
PHP    v5.6.36
MySQL  v5.6.39-cll-lve

Мой скрипт загружает файл .sql и запускает $dbClient->exec($sql) для его содержимого. Процедуры с одним оператором внутри, кажется, работают, но более сложная, такая как приведенная ниже, не работает:

DROP PROCEDURE IF EXISTS `procName`;

CREATE DEFINER=CURRENT_USER PROCEDURE `procName` (IN in_param INT)
BEGIN
    SET @param= in_param;
    SET @SQL := "SELECT * FROM table_name";

    PREPARE statement FROM @SQL;
    EXECUTE statement USING @param;
    DEALLOCATE PREPARE statement;
END;

Когда я запускаю скрипт с сервера (конфигурация выше), тело процедуры будет NULL. Я не получаю ошибок или предупреждений во время вызова скрипта.

Если я перетаскиваю код SQL в диспетчер SQL (я использую HeidiSQL), все работает. Когда я запускаю скрипт из моего контейнера Docker (той же версии MySQL и PHP), все работает. И если я запускаю код SQL, установленный на @SQL, запрос работает нормально, поэтому я не думаю, что там есть ошибка.

Моей первой мыслью было, что мне нужно возиться с настройкой DELIMITER, но я потерпел неудачу. Также любопытно, что скрипт работает так, как задумано в моем контейнере Docker.

Единственное различие между моим контейнером Docker и реальным сервером, которое я вижу, состоит в том, что сервер использует v5.6.39 из pdo_mysql, тогда как мой контейнер Docker использует mysqlnd 5.0.11-dev.

...