小编典典

PHP命令不同步错误

mysql

我在PHP / MySQLi中使用两个准备好的语句从mysql数据库检索数据。但是,当我运行语句时,出现“命令不同步,您现在不能运行命令”错误。

这是我的代码:

    $stmt = $mysqli->prepare("SELECT id, username, password, firstname, lastname, salt FROM members WHERE email = ? LIMIT 1";
    $stmt->bind_param('s', $loweredEmail);
    $stmt->execute();
    $stmt->store_result();
    $stmt->bind_result($user_id, $username, $db_password, $firstname, $lastname, $salt);
    $stmt->fetch();

    $stmt->free_result();
    $stmt->close();

    while($mysqli->more_results()){
        $mysqli->next_result();
    }

    $stmt1 = $mysqli->prepare("SELECT privileges FROM delegations WHERE id = ? LIMIT 1");
    //This is where the error is generated
    $stmt1->bind_param('s', $user_id);
    $stmt1->execute();
    $stmt1->store_result();
    $stmt1->bind_result($privileges);
    $stmt1->fetch();

我尝试过的

  • 将准备好的语句移动到两个单独的对象。
  • 使用代码:

    while($mysqli->more_results()){
    $mysqli->next_result();
    

    }
    //To make sure that no stray result data is left in buffer between the first
    //and second statements

  • 使用free_result()和mysqli_stmt-> close()

PS:“不同步”错误来自第二条语句的“ $ stmt1-> error”


阅读 167

收藏
2020-05-17

共1个答案

小编典典

在mysqli ::
query中,如果您使用MYSQLI_USE_RESULT,则所有后续调用都将返回错误命令,除非您调用mysqli_free_result()

调用多个存储过程时,可能会遇到以下错误:“命令不同步;您现在不能运行此命令”。即使在两次调用之间对结果对象使用close()函数,也会发生这种情况。要解决此问题,请记住在每次存储过程调用之后在mysqli对象上调用next_result()函数。请参见下面的示例:

<?php
// New Connection
$db = new mysqli('localhost','user','pass','database');

// Check for errors
if(mysqli_connect_errno()){
 echo mysqli_connect_error();
}

// 1st Query
$result = $db->query("call getUsers()");
if($result){
     // Cycle through results
    while ($row = $result->fetch_object()){
        $user_arr[] = $row;
    }
    // Free result set
    $result->close();
    $db->next_result();
}

// 2nd Query
$result = $db->query("call getGroups()");
if($result){
     // Cycle through results
    while ($row = $result->fetch_object()){
        $group_arr[] = $row;
    }
     // Free result set
     $result->close();
     $db->next_result();
}
else echo($db->error);

// Close connection
$db->close();
?>

我希望这个能帮上忙

2020-05-17