【问题标题】:MySqli stored procedure with return from PHP从 PHP 返回的 MySqli 存储过程
【发布时间】:2017-12-07 02:23:03
【问题描述】:

我正在尝试通过 PHP 调用存储过程。但我没有得到想要的输出。我在 PHP 中遇到了一种不正确的语法错误。如果我独立运行存储过程,它会按预期工作。下面我给出这个的代码 sn-p -

  <?php

$host = "localhost";
$db_user = "userid";
$db_password = "password";
$db_name = "trialdb";

$con = mysqli_connect($host,$db_user,$db_password,$db_name);

$name = $_POST["Name"];
$id = $_POST["Id"];

$storedProc = "CALL CheckNameId(?,?, @returnStatus)";

$stmt = mysqli_prepare($con, $storedProc);
mysqli_stmt_bind_param($stmt,"si",$name, $id);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $returnStatus);

mysqli_stmt_fetch($stmt);
echo $returnStatus;

mysqli_stmt_close($stmt);
mysqli_close($con);

?>

我在 mysqli_stmt_bind_param、mysqli_stmt_execute、mysqli_stmt_bind_result 处收到错误...将第一个参数作为布尔值传递。它将 $stmt 解释为布尔值。 请问我的理解有什么问题吗? 我怀疑我使用绑定结果的方式有问题。 可能是我对存储过程中的“语句”、“结果集”或处理“结果集”存在理解差距。 如果有任何好的链接,任何人都可以提出,我很乐意参考。

【问题讨论】:

    标签: php mysql mysqli


    【解决方案1】:

    存储过程的 OUT 参数只设置会话变量的值,它不会在结果中返回它。

    您随后必须自己查询会话变量:

    $storedProc = "CALL CheckNameId(?,?, @returnStatus)";
    $stmt = mysqli_prepare($con, $storedProc);
    mysqli_stmt_bind_param($stmt,"si",$name, $id);
    mysqli_stmt_execute($stmt);
    mysqli_stmt_close($stmt);
    
    $sql = "SELECT @returnStatus";
    $result = mysqli_query($con, $sql);
    $row = mysqli_fetch_row($result);
    echo $row[0];
    

    【讨论】:

    • 您的建议有帮助。我将尝试更多地了解 MySql Stored Procs 在 PHP 中的处理方式。
    猜你喜欢
    • 2011-02-12
    • 2015-11-09
    • 2015-12-17
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    相关资源
    最近更新 更多