簡體   English   中英

如何從 PHP 創建 MySQL 存儲過程?

[英]How to create a MySQL stored procedure from PHP?

我嘗試使用存儲過程 (SP) 的 create 語句從 PHP 查詢 MySQL 的嘗試都失敗了。 這不可能嗎?

如果確實可能,請舉例說明。

除了特權之外,很可能會導致您的問題的是,實際上 mysql_query($query) 每次調用只能運行一個命令!

所以你要做的就是將命令拆分成幾個 mysql_query($query) -calls。

我的意思是這樣的:

$query = "DROP FUNCTION IF EXISTS fnElfProef (accountNr INT)";

mysql_query($query);

$query = "CREATE FUNCTION fnElfProef (accountNr INT)
    RETURNS BOOLEAN
       BEGIN
          DECLARE i, totaal INT DEFAULT 0;
          WHILE i < 9 DO
             SET i = i+1;
             SET totaal = totaal+(i*(accountNr%10));
             SET accountNr = FLOOR(accountNr/10);
          END WHILE;
       RETURN (totaal%11) = 0;
    END";
mysql_query($query);


$query = "SELECT * FROM mytable";
mysql_query($query);

只要:

  • 您正在使用 MySQL 5.0+
  • 您的帳戶已被授權創建存儲過程
  • 您正在使用有效的CREATE PROCEDURE 語法

然后它應該工作。 檢查這些並返回給我們。

您不能在 PHP 中使用 DELIMITER 語句。 所以,

1) remove the DELIMITER statements
2)and change all your delimiters to ;

這很煩人,因為現在你必須有一個帶有分隔符的版本,以便在 MySQL 命令行中進行開發和測試,或者像 sqlyog 或 MySQL 工作台這樣的 MySQL 工具,以及一個沒有分隔符的版本,以便通過你的 PHP 程序使用。

如果有人知道更好的方法,我想聽聽 - (但不是通過調用 OS shell 腳本 - 有太多殘留問題。)

而且你需要超級權限。

MySQL 手冊清楚地概述了如何創建存儲過程( 13.1.15. CREATE PROCEDURECREATE FUNCTION Syntax

下一個問題是:您用於訪問 MySQL 數據庫的帳戶是否具有實際創建過程的適當權限?

可以在此處找到有關此問題的詳細信息: 19.2.2。 存儲例程和 MySQL 權限

您是否對從 PHP 連接的帳戶獲得了足夠的權限? 手冊

從 MySQL 5.0.3 開始,要執行 CREATE PROCEDURE 或 CREATE FUNCTION 語句,需要有 CREATE ROUTINE 權限

另請參閱手冊中的存儲例程和 MySQL 權限

替換 mysql_query($query);

到 mysql_unbuffered_query($query,$link_connection);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM