如何使用存储过程在 php 中制作报告?根据我的搜索,存储过程使用 mysqli 而不是 mysql。所以我很困惑这是否可能。你能给我一个如何实现这个的例子吗?
1 回答
如果你想在 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 调用它们。