繁体   English   中英

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

[英]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);

只要:

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

然后它应该工作。 检查这些并返回给我们。

您不能在 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 PROCEDURECREATE 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM