[英]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);
您不能在 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 PROCEDURE
和CREATE 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.