簡體   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