【发布时间】:2019-03-05 10:37:05
【问题描述】:
我尝试使用以下代码创建存储过程:
DELIMITER //
CREATE PROCEDURE AddTrickBaseInvert(
IN invertName VARCHAR(16),
IN invertType TINYINT(1)
)
BEGIN
INSERT INTO trick_bases (type)
VALUES (1);
INSERT INTO trick_bases_invert (
baseId,
name,
type
)
VALUES (
LAST_INSERT_ID(),
name,
type
);
END //
DELIMITER ;
当我尝试在 localhost/phpmyadmin/ 上运行 MySQL 测试时它起作用了,但是当我尝试通过 PHP 使用相同的 SQL 代码创建相同的过程时,它给了我以下错误:
致命错误:未捕获的 PDOException:SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 1 行的“DELIMITER $$ CREATE PROCEDURE AddTrickBaseInvert( IN invertName ”附近使用正确的语法 ...
PHP 代码在这里:
$sql = '
DELIMITER //
CREATE PROCEDURE AddTrickBaseInvert(
IN invertName VARCHAR(16),
IN invertType TINYINT(1)
)
BEGIN
INSERT INTO trick_bases (type)
VALUES (1);
INSERT INTO trick_bases_invert (
baseId,
name,
type
)
VALUES (
LAST_INSERT_ID(),
name,
type
);
END //
DELIMITER ;';
$oDb->exec($sql);
如您所见,SQL 代码完全相同,但不知何故没有创建过程。我试图做研究,但我还没有找到任何答案。当我在 localhost/phpmyadmin 的 SQL 选项卡中运行代码时,我是否遗漏了上面代码中的一些重要内容?
提前致谢:)
【问题讨论】:
-
不要使用重新定义分隔符语法,当使用mysql的应用程序代码/命令行时。我们重新定义了分隔符,以阻止 PHPMyadmin 将
;解析为执行触发器 -
感谢您的评论!由于我对使用和创建存储过程还很陌生,所以我不太确定在我的情况下应该做些什么不同的事情。你能更详细地解释一下吗? @MadhurBhaiya
标签: php mysql stored-procedures