If you are getting this error:
Internal SQL Bug: 2014, Commands out of sync; you can't run this command now
Then you never called mysqli_result::free(), mysqli_result::free_result(), mysqli_result::close(), or mysqli_free_result() in your script, and must call it before executing another stored procedure.
mysqli_result::free -- mysqli_free_result — Frees the memory associated with a result
Oriented object style
Frees the memory associated with the result.
You should always free your result with mysqli_free_result(), when your result object is not needed anymore.
No value is returned.
Freeing the memory associated with a result means that the references returned by mysqli_fetch_object (or equivalent) are cleared. Thus if you should pass an object pointing to a database row _by reference_, every call of mysqli_free_result will discard the referenced data.