如何从PHP创建MySQL存储过程?

如何从PHP创建MySQL存储过程?,php,mysql,stored-procedures,Php,Mysql,Stored Procedures,我试图用存储过程(SP)的create语句从PHP查询MySQL,但都失败了。这不可能吗 如果确实可能,请给出一个例子。您从PHP连接的帐户是否有足够的特权?从 从MySQL 5.0.3开始,执行 创建过程或创建函数 声明中,有必要 创建例程权限 另请参见手册中的内容。只要: 您正在使用MySQL 5.0+ 您的帐户已被授权创建存储过程 您使用的是有效的 那么它应该会起作用。请检查这些内容,然后与我们联系。MySQL手册对这些内容有一个清晰的概述 下一个问题是:您用于访问MySQL数据库的帐

我试图用存储过程(SP)的create语句从PHP查询MySQL,但都失败了。这不可能吗


如果确实可能,请给出一个例子。

您从PHP连接的帐户是否有足够的特权?从

从MySQL 5.0.3开始,执行 创建过程或创建函数 声明中,有必要 创建例程权限

另请参见手册中的内容。

只要:

  • 您正在使用MySQL 5.0+
  • 您的帐户已被授权创建存储过程
  • 您使用的是有效的

那么它应该会起作用。请检查这些内容,然后与我们联系。

MySQL手册对这些内容有一个清晰的概述

下一个问题是:您用于访问MySQL数据库的帐户是否具有实际创建过程的权限


关于这个问题的详细信息可以在这里找到:

除了特权之外,很可能导致您的问题的原因是,实际上mysql\u query($query)每次调用只能运行一个命令

因此,您需要做的是将命令拆分为几个mysql_query($query)-调用

我的意思是这样的:

$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);
$query=“如果存在函数fnElfProef(accountNr INT)”;
mysql\u查询($query);
$query=“创建函数fnElfProef(accountNr INT)
返回布尔值
开始
声明i,totaal INT默认值为0;
而我呢
设置i=i+1;
设置totaal=totaal+(i*(accountNr%10));
设置accountNr=楼层(accountNr/10);
结束时;
收益率(总收益率%11)=0;
结束”;
mysql\u查询($query);
$query=“从mytable中选择*”;
mysql\u查询($query);

不能在PHP中使用分隔符语句。所以,

1) remove the DELIMITER statements
2)and change all your delimiters to ;
这很烦人,因为现在您必须在MySQL命令行或类似sqlyog或MySQL workbench的MySQL工具中有一个用于开发和测试的带有分隔符的版本,以及一个通过PHP程序使用的没有分隔符的版本

如果有人知道一个更好的方法,我想听听(但不是通过调用操作系统外壳脚本——它有太多的遗留问题)

您需要超级权限。

替换 mysql\u查询($query)

到 mysql\u无缓冲\u查询($query,$link\u connection)