繁体   English   中英

为什么我不能在PHP中创建MySQL存储过程?

[英]Why can't I create a MySQL stored procedure in PHP?

我尝试使用以下代码创建存储的过程:

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选项卡中运行代码时,是否错过了上面代码中包含的某些基本内容?

提前致谢 :)

  • 尝试使用应用程序代码创建存储过程时,无需重新定义定界符。
  • 另外,为避免某些情况下的异常,请在创建过程语句之前调用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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM