如何调用MySQL函数并使用PHP将返回值存储在变量中?

时间:2016-06-20 10:00:49

标签: php mysql

如何调用MySQL函数并将返回值存储在PHP变量中?

我试过这个:

$ret = mysqli_query($connection, "call FP_USER_EXISTS('$emailid')");

if ($ret==1)
{
    echo "User already exists \n";
}
else
{
  echo 'Inserted successfully';
}

不幸的是,这并没有提供我期望的布尔返回值。我希望它检索用户是否存在,但它返回mysqli_query的成功/失败状态。此类查询的docs indicate this is TRUE

如何从实际的MySQL函数中获取返回码?

1 个答案:

答案 0 :(得分:0)

MySQLi Stored Procedures文档提供了有关使用MySQLi调用存储过程的一些具体指导:

  

存储过程可以返回结果集。无法使用mysqli_query()正确获取从存储过程返回的结果集。 mysqli_query()函数将语句执行和将第一个结果集提取到缓冲结果集(如果有)中。但是,用户隐藏了其他存储过程结果集,导致mysqli_query()无法返回用户预期的结果集。

     

使用mysqli_real_query()或mysqli_multi_query()获取从存储过程返回的结果集。这两个函数都允许获取语句返回的任意数量的结果集,例如CALL。无法获取存储过程返回的所有结果集会导致错误。

根据这些信息,最好使用mysqli_real_query函数来检索所需的结果。请改用此代码:

$ret=mysqli_real_query($connection,"call FP_USER_EXISTS('$emailid')");
if($ret==1)
{
    echo "Error: " . mysqli_error();
}
else
{
    if ($row = mysqli_fetch_array($result)) {
        if ($row[0]) {
            echo 'Inserted successfully';
        } else {
            echo "User already exits";
        }
    } else {
        echo "No result returned";
    }
}

此代码假定存储过程在插入新记录时返回TRUE,如果不插入则返回FALSE。如果不是这种情况(因为问题中不存在这些细节),您必须相应地进行调整。附加错误处理用于确保语句本身已成功执行,并且至少返回了一个结果行。