2009-01-13 28 views
5

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

如果確實有可能,請舉個例子。

+0

http://forums.mysql.com/read.php?98161275,161275 – 2013-04-23 21:44:26

回答

0

您是否有足夠的權限,您從PHP連接的帳戶?從the manual

在MySQL 5.0.3中,執行 CREATE PROCEDURE或CREATE FUNCTION 聲明,就必須有 CREATE ROUTINE權限

又見Stored Routines and MySQL Privileges的說明書中無。

2

只要:

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

1

除了特權,什麼大抵相當可能會導致您的問題是,實際的mysql_query($查詢)只能每次調用工作一個命令!

所以你要做的就是把命令分成sevaral 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); 
0

你不能在PHP中使用的分隔符的語句。因此,

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

很是煩人,因爲現在你必須有一個與DELIMITERS在MySQL命令行或MySQL的工具,如SQLyog的或MySQL Workbench開發和測試版本,並沒有DELIMITERS版本通過你的PHP中使用程序。

如果有人知道一個更好的辦法,我想聽聽它 - (而不是通過調用OS shell腳本 - 有太多的遺留問題)

而你需要SUPER權限。