我尝试使用以下代码创建存储的过程:
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语法有错误;请参阅附录A。检查与您的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”选项卡中运行代码时,是否错过了上面代码中必不可少的内容?
预先感谢:)
答案 0 :(得分:2)
DROP PROCEDURE IF EXISTS
。请执行以下操作:
// drop if procedure exists already or not
$sql_drop = 'DROP PROCEDURE IF EXISTS AddTrickBaseInvert';
$oDb->exec($sql_drop);
// Now call create procedure statement
$sql = '
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';
$oDb->exec($sql);