2009-01-13 89 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权限。