-1

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

4

1 回答 1

2

如果你想在 MySQL 中调用一个存储过程,两者都mysql可以mysqli做到。虽然,无论如何我都会推荐mysqli,因为它更好(因此i; '改进';我认为)。

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

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

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

无法从 PHP 内部创建存储过程,因为虽然 PHP 确实multi_query()在其mysqli对象上有一个函数,但它只允许;作为分隔符。这很糟糕,因为您将存储过程中需要它,但 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 内部运行这个 SQL,使用multi_query(),它会将我的查询拆分;为五个查询的结果,这都会有语法错误(因为它们是片段)。

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

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

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

于 2013-03-09T12:28:45.363 回答