如何从PHP创建MySQL存储过程?
我试图用存储过程(SP)的create语句从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数据库的帐
如果确实可能,请给出一个例子。您从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)