我在编写脚本以通过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 Manager(我使用HeidiSQL),则一切正常。当我从Docker容器(相同的MySQL和PHP版本)运行脚本时,一切正常。而且,如果我运行设置为@SQL
的SQL代码,查询就可以正常工作,因此我认为那里没有错误。
我的第一个想法是我需要弄乱设置DELIMITER
的操作,但是我没有成功。同样奇怪的是,该脚本可以按照我的Docker容器中的预期工作。
我看到的Docker容器和实际服务器之间的唯一区别是服务器使用pdo_mysql
的v5.6.39,而我的Docker容器使用mysqlnd 5.0.11-dev
。