mysql: Commands out of sync

Letztens kam ich an der php mysqli Fehlermeldung vorbei:

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

Konkret war es bei mir ein select-Statement ausführen nach dem ausführen einer Prozedur mit Rückgabewert. Nach vielem hin und her und noch mehr googeln war keine vernünftige Lösung für das Problem zu finden. Alle Lösungen bezogen sich nur auf mysql_free_result(), was bei meiner Problemstellung keinen Unterschied machte. Nur ein mysqli_next_result($conn) hat die Meldung verschwinden lassen. Angeblich liefern Prozeduren zusätzlich zu dem letzten select-Statement noch ein weiteres Resultset zurück, das weiterführende Informationen zu der Ausführung enthält. Dieses muss man warscheinlich überspringen, damit das nächste Statement auf der gleichen Verbindung ausgeführt werden kann.

Hat nicht geholfen:

Wenn Commands out of sync; you can't run this command now in Ihrem Clientcode gemeldet wird, rufen Sie Clientfunktionen in der verkehrten Reihenfolge auf.

Dies kann zum Beispiel geschehen, wenn Sie mysql_use_result() benutzen und versuchen, eine neue Anfrage auszuführen, ehe Sie mysql_free_result() aufgerufen haben. Oder wenn Sie versuchen, zwei Anfragen, die Daten liefern, auszuführen, ohne dazwischen mysql_use_result() oder mysql_store_result() aufzurufen.

Quelle: mysql Dokumentation

Das einzige was bei mir geholfen hat, war

mysqli_next_result($conn);

vor dem ausführen des nächsten Statements auszuführen.

phpmyadmin und Probleme beim Import

Nach der Installation des phpmyadmin wollte ich eine Datenbank aus einem Backup importieren. Leider kam immer wieder die Meldung, „Die Datei konnte nicht gelesen werden“. Suhosin und post_max_size Einstellungen hatten auch keinen Effekt. Das einzige was geholfen hat war, dass man das tmp-Verzeichnis zu der open_basedir Konfiguration im virtuellem Host hinzufügt. Nur dann ist phpmyadmin in der Lage das tmp-Verzeichnis zu nutzen.

<Directory /var/www/pma>
...
php_admin_value open_basedir "/tmp/:/var/www/pma/"
...
</Directory>