如果你想在 MySQL 中调用一个存储过程,mysql 和 mysqli 都可以做到。尽管如此,我还是推荐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 调用它们。