【问题标题】:Executing stored procedure with out parameter in PHP在PHP中执行不带参数的存储过程
【发布时间】:2014-03-28 16:30:22
【问题描述】:

这是我的存储过程:

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 服务器版本,以便使用正确的语法 在第 1 行的 'SELECT @out' 附近调用 insert_request_info('invitation', 假,假,假,假,'',现在(),时间戳(0),时间戳(0),12, 空,@out);SELECT @out;

我检查了其他解决方案,许多都做了同样的事情。但我仍然收到错误,有什么帮助吗?

【问题讨论】:

    标签: php mysql sql stored-procedures


    【解决方案1】:

    在 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);
    

    【讨论】:

      【解决方案2】:

      mysql_query will only send one query at at time,不推荐使用mysql 扩展;你应该使用改进的扩展,mysqli,更具体地说是函数mysqli_multi_query

      话虽如此,我相信向mysql_query 发送多个查询只会忽略第一个查询之后的查询,因此您不应该从 MySQL 中看到该错误。 它看起来像 @987654329 中的分号@导致这个错误。您还应该考虑在定义过程后显式更改分隔符,以避免将来出现错误。

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

      【讨论】:

        猜你喜欢
        • 2011-08-27
        • 2014-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-11
        • 2017-11-02
        • 2023-04-07
        • 2019-02-16
        相关资源
        最近更新 更多