在PHP中执行带有out参数的存储过程


Executing stored procedure with out parameter in PHP

这是我的存储过程:

DELIMITER $$
CREATE PROCEDURE `insert_request_info`(in request_type text, in adequeate bool, in status bool, in email bool, in pickup bool, in comments text, 
    in request_date timestamp, in pickup_date timestamp, in email_date timestamp, in psid varchar(40), in dso_id varchar(40), out last_id real)
BEGIN
insert into request_info values(DEFAULT, request_type, adequeate, status, email, pickup, comments, request_date, pickup_date, email_date, psid, dso_id);
SET last_id = LAST_INSERT_ID();
END

我正在尝试以以下方式执行这个存储过程:

$request_info_query = "CALL insert_request_info('invitation', false, false, false, false, '', Now(), timestamp(0), timestamp(0), $student_psid, null, @out);SELECT @out;";
$result = mysql_query($request_info_query, $con);
当我执行上面的代码时,它给了我以下错误:

你的SQL语法有错误;查看手册对应于MySQL服务器版本,以便使用正确的语法SELECT @out = '邀请',", Now(), timestamp(0), timestamp(0), 12,SELECT @out;

我检查了其他的解决方案,很多都是一样的。但还是会出错,有帮助吗?

在PHP中,一次只能执行一条语句。使用两个不同的调用来执行此代码。例如:

// Insert info
$insert_query = "CALL insert_request_info('invitation', false, false, false, false, '', Now(), timestamp(0), timestamp(0), $student_psid, null, @out);";
$insert_result = mysql_query($insert_query, $con);
// Get query result
$request_info_query = "SELECT @out;";
$result = mysql_query($request_info_query, $con);

mysql_query每次只发送一个查询,mysql扩展已弃用;您应该使用改进的扩展mysqli,更具体地说,应该使用函数mysqli_multi_query

也就是说,我认为发送多个查询到mysql_query只是忽略了第一个查询之后的查询,所以你不应该从MySQL看到这个错误。看起来mysql_query中的分号会导致这个错误。您还应该考虑在定义过程之后显式地更改分隔符,以避免将来出现错误的可能性。

DELIMITER $$
CREATE PROCEDURE ...
END$$
DELIMITER ;