У меня проблемы с написанием скрипта для успешного создания хранимой процедуры через 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
.