【问题标题】:Reports in PHP using stored procedure [closed]使用存储过程的 PHP 报告 [关闭]
【发布时间】:2013-02-24 23:13:00
【问题描述】:

如何使用存储过程在 php 中制作报表?根据我的搜索,存储过程使用 mysqli 而不是 mysql。所以我很困惑这是否可能。你能举个例子来说明如何实现这个吗?

【问题讨论】:

  • “报告”到底是什么意思?
  • 报告类似 vb6...
  • 你能澄清一下这些到底是什么吗?另外,存储过程如何作为需求发挥作用?
  • @Pekka웃:我需要在我的数据库中使用存储过程来查看报告,例如供应商、产品列表,从我的 php 脚本中调用它们。我希望我对你说清楚了。

标签: php mysql stored-procedures mysqli report


【解决方案1】:

如果你想在 MySQL 中调用一个存储过程,mysqlmysqli 都可以做到。尽管如此,我还是推荐mysqli,因为它更好(因此i;'改进';我认为)。

您可以像在 PHP 中调用任何其他 SQL 语句一样调用存储过程:

mysqli_query($link, "CALL Procedure('$strVar', $intVar, etc.)");

虽然我的示例使用mysqli_query,但mysql_query 也可以。

无法从 PHP 内部创建存储过程,因为虽然 PHP 在其 mysqli 对象上确实有一个 multi_query() 函数,但它只允许 ; 作为分隔符。这很糟糕,因为您将需要 在您的存储过程中,但 PHP 会将它们作为单独的查询来执行。

以 MySQL 中的存储过程为例:

DELIMITER $$
DROP PROCEDURE IF EXISTS `Procedure`$$
CREATE PROCEDURE `Procedure` (
    IN `userid` INT
)
    IF EXISTS (SELECT 1
        FROM `users`
        WHERE `user_id` = `userid`)
    THEN
        SELECT `user_name`
        FROM `users`
        WHERE `user_id` = `userid`;
    ELSE
        SELECT `user_name` = 'No such user';
    END IF;
END $$

请注意您需要如何重命名分隔符(标准分隔符是;),因为它在存储过程中使用(因为一个过程是多个查询,必须由这样的分隔符分隔)。 $$ 是通常推荐的分隔符重命名。

如果我从 PHP 内部使用 multi_query() 运行此 SQL,它会将我的查询拆分为 ;,从而产生五个查询,这些查询都会出现语法错误(因为它们是片段)。

因此,要创建存储过程,请为此编写一个 .sql 脚本。然后从终端运行您的脚本:

$ mysql --user="$USER" --password="$PASSWORD" $DB < $FILE

如果您想了解更多关于 MySQL 中存储过程的信息,我建议您在网上搜索一下,这里有很多优秀的教程。但与常规 SQL 语句相比,您不需要任何特殊的魔法即可从 PHP 调用它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    • 1970-01-01
    相关资源
    最近更新 更多