我有许多用 MySQL Workbench 制作的存储过程。当使用 MySQL 工作台将它们放入我的测试数据库时,它们工作得很好。
现在我正在准备用于部署的数据库创建脚本,这是唯一给我带来麻烦的脚本。当我使用命令行/mysql shell 时,脚本运行得非常好。只有当我使用 PHP mysql(i) 接口来执行脚本时——它才会失败。不加评论。
我使用 MySQL 工作台为我生成的过程创建脚本;也就是说,它具有这种模式:
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
在脚本的开头,然后对每个过程重复:
DELIMITER $$
USE `dbname`$$
CREATE PROCEDURE `procname`(IN inputparameters)
BEGIN
...程序在这里
;
END$$
DELIMITER ;
如果从 MySQL Workbench 运行,此脚本可以正常工作。如果我从 mysql 命令行尝试相同的操作,它也运行良好。但是当我通过 PHP mysqli 接口执行它时它无法完成任何事情(使用 mysqli_multi_query 执行它,这对于创建和填充数据库的其他脚本来说很好)。界面上没有返回错误,没有结果(!)。我得到的只是“假”,仅此而已。错误代码为 0,没有错误信息。
这对我来说是一个很大的 WTF,我希望你能指出我正确的方向 - 我该如何解决这个问题并从 PHP 安装程序?
PS:root/admin 访问权限已提供并验证(毕竟,我刚刚使用相同的连接创建了数据库,创建了用户,插入了表等等)。