W3docs

Commands out of sync; you can't run this command now

The "Commands out of sync; you can't run this command now" error in PHP usually occurs when you have called a MySQL function in an incorrect order.

The "Commands out of sync; you can't run this command now" error in PHP usually occurs when you have called a MySQL function in an incorrect order.

This error occurs because MySQL has a command buffer that needs to be used in a specific order. When you try to execute a new query while a previous unbuffered result set is still open, or when mixing buffered and unbuffered queries incorrectly, it results in this error. Note that mysqli_query() is buffered by default, so this error typically only appears when you explicitly switch to unbuffered mode.

Here are a few things you can try to fix this error using modern mysqli:

  1. Make sure that you are calling mysqli_query() only once for each SQL statement, and fully process the result before executing another.
  2. Since mysqli_query() is buffered by default, you generally do not need to call mysqli_store_result() or mysqli_use_result(). These methods are only required when you explicitly use real_query() to execute unbuffered queries.
  3. If you are using mysqli_use_result(), make sure to call mysqli_free_result() after you have finished processing the result set.

Example:

$mysqli = new mysqli("localhost", "user", "password", "database");

// Execute an unbuffered SELECT query
$mysqli->real_query("SELECT * FROM users");

// Fetch results from the unbuffered result set
$result = $mysqli->use_result();
while ($row = $result->fetch_assoc()) {
    // process row
}
$result->free(); // Free the result set

// Now safe to run another query
$mysqli->query("INSERT INTO logs (status) VALUES ('ok')");

I hope this helps! Let me know if you have any questions.