如何调用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函数中获取返回码?
答案 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
。如果不是这种情况(因为问题中不存在这些细节),您必须相应地进行调整。附加错误处理用于确保语句本身已成功执行,并且至少返回了一个结果行。