Today I was programming MySQL via PHP and I received an error “Error in SQL: Commands out of sync; you can’t run this command now”. It turned out the problem was that a previous mulit_query had mysqli_results that hadn’t been freed. This article helped me solve the problem, and now my batch mode SQL processor looks like this:
public function execute_batch( $sql ) {
$this->write_count++;
if ( ! $this->link->multi_query( $sql ) ) {
$this->throw_error( $sql );
}
if ( $this->link->more_results() ) {
do {
$result = $this->link->use_result();
if ( $result instanceof mysqli_result ) {
$result->free();
}
}
while ( $this->link->more_results() && $this->link->next_result() );
}
}
This code executes the SQL batch and then frees any mysqli_results that result from the query batch.