从PDO创建的过程的主体为NULL

时间:2019-03-05 14:19:19

标签: mysql stored-procedures pdo

我在编写脚本以通过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

0 个答案:

没有答案