问题描述:php在执行mysql存储过程后执行其他数据库操作时,报错Commands out of sync; you can't run this command now
产生原因:1、存储过程产生的结果集没有在php中获取;
2、存储过程的结果集没有被释放掉或者没有释放完全;
3、如果用mysql而非mysqli需要断开数据库再重新连接。
解决方法:1、使用mysqli驱动;
2、mysqli_multi_query来遍历所有存储过程的结果集,并释放
具体实现:
//存储过程,插入tuser和tuser_props
//解决存储过程后不能query问题,用mysqli_multi_query处理
if (mysqli_multi_query($con,"call sp_reg('$udid','$loginName', '$loginPwd', '$userName','$userPic',''); "))
{
do {
if ($result = mysqli_store_result($con)) {
while ($row = mysqli_fetch_row($result)) {
$resultSign = $row[0];
}
mysqli_free_result($result);
}
} while (mysqli_next_result($con));
}
if($resultSign == '1'){
$sql2 = "SELECT * FROM `tuser` WHERE username = '$loginName' ";
$result2 = mysqli_query($con,$sql2);
if(mysqli_num_rows($result2) > 0)
{
$row = mysqli_fetch_array($result2);
$json = array("sign"=>"1","userNo"=>$row["no"],"userName"=>$row["nickname"],"headicon"=>$row["headicon"]);
$result2->close();
mysqli_close($con);
die(json_encode($json));
}else{
$json = array("sign"=>"0", "result"=>"Error0.".mysqli_error($con));
mysqli_close($con);
die(json_encode($json));
}
}else{
$json = array("sign"=>"0", "result"=>"Error0.".mysqli_error($con));
mysqli_close($con);
die(json_encode($json));
}