【问题标题】:stored procedure prepared statement bug mysql php存储过程准备语句错误mysql php
【发布时间】:2014-09-03 19:39:28
【问题描述】:

这是我的存储过程:

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `testProc`(IN num INT, INOUT num2 INT(11))
BEGIN
    set num2 = num+num2+7;
END

这是调用它的代码:

if ($stmt = mysqli_prepare($con, 'call testProc(?,?)')) {
    mysqli_stmt_bind_param($stmt, 'ii', $type, $newId);
    mysqli_stmt_execute($stmt);
    echo $newId;
    exit;
    }

这是我得到的错误:

<b>Warning</b>:  mysqli_stmt_execute(): Premature end of data (mysqlnd_wireprotocol.c:1116) in

我不明白。这么简单的事情怎么会失败?当我在尝试设置一个简单示例时碰到这堵砖墙时,我只是想弄清楚如何从带有存储过程的准备好的语句中获取值。请帮忙,因为在我能解决这个问题之前,我无法提供一个例子,所以我无法解决我的真正问题。谢谢。

【问题讨论】:

    标签: php mysql stored-procedures prepared-statement


    【解决方案1】:

    我认为您应该在 bind_param 之后使用 bind_result。

    查看http://php.net/manual/en/mysqli-stmt.bind-result.php

    以及之前的堆栈溢出问题:mysqli bind_param() fatal error

    【讨论】:

    • 我尝试添加一行:mysqli_stmt_bind_result($stmt, $type, $newId);但这只是导致“mysqli_stmt_bind_result():绑定变量的数量与准备好的语句中的字段数量不匹配”
    • 啊哈!我会在执行之前放置第二个绑定。现在它起作用了。感谢您的帮助。
    • 我很高兴!我正在编写代码以使其更易于理解,但被困在会议中。
    猜你喜欢
    • 2014-08-01
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多