Commands out of sync; Sie können nicht führen Sie diesen Befehl nun
Ich versuche ausführen meines PHP-code, der fordert, zwei MySQL-Abfragen via mysqli, und bekomme die Fehlermeldung "Commands out of sync; Sie können nicht führen Sie diesen Befehl jetzt".
Hier ist der code, den ich verwende
<?php
$con = mysqli_connect("localhost", "user", "password", "db");
if (!$con) {
echo "Can't connect to MySQL Server. Errorcode: %s\n". Mysqli_connect_error();
exit;
}
$con->query("SET NAMES 'utf8'");
$brand ="o";
$countQuery = "SELECT ARTICLE_NO FROM AUCTIONS WHERE upper(ARTICLE_NAME) LIKE % ? %";
if ($numRecords = $con->prepare($countQuery)) {
$numRecords->bind_param("s", $brand);
$numRecords->execute();
$data = $con->query($countQuery) or die(print_r($con->error));
$rowcount = $data->num_rows;
$rows = getRowsByArticleSearch("test", "Auctions", " ");
$last = ceil($rowcount/$page_rows);
} else {
print_r($con->error);
}
foreach ($rows as $row) {
$pk = $row['ARTICLE_NO'];
echo '<tr>' . "\n";
echo '<td><a href="#" onclick="updateByPk(\'Layer2\', \'' . $pk . '\')">'.$row['USERNAME'].'</a></td>' . "\n";
echo '<td><a href="#" onclick="updateByPk(\'Layer2\', \'' . $pk . '\')">'.$row['shortDate'].'</a></td>' . "\n";
echo '<td><a href="#" onclick="deleterec(\'Layer2\', \'' . $pk . '\')">DELETE RECORD</a></td>' . "\n";
echo '</tr>' . "\n";
}
function getRowsByArticleSearch($searchString, $table, $max) {
$con = mysqli_connect("localhost", "user", "password", "db");
$recordsQuery = "SELECT ARTICLE_NO, USERNAME, ACCESSSTARTS, ARTICLE_NAME, date_format(str_to_date(ACCESSSTARTS, '%d/%m/%Y %k:%i:%s'), '%d %m %Y' ) AS shortDate FROM AUCTIONS WHERE upper(ARTICLE_NAME) LIKE '%?%' ORDER BY str_to_date(ACCESSSTARTS, '%d/%m/%Y %k:%i:%s')" . $max;
if ($getRecords = $con->prepare($recordsQuery)) {
$getRecords->bind_param("s", $searchString);
$getRecords->execute();
$getRecords->bind_result($ARTICLE_NO, $USERNAME, $ACCESSSTARTS, $ARTICLE_NAME, $shortDate);
while ($getRecords->fetch()) {
$result = $con->query($recordsQuery);
$rows = array();
while($row = $result->fetch_assoc()) {
$rows[] = $row;
}
return $rows;
}
}
}
Habe ich versucht zu Lesen, bis auf diese, aber ich bin nicht sicher, was zu tun ist. Ich gelesen habe speichert das Ergebnis und der freie führen, aber diese haben keinen Unterschied gemacht, wenn mit Ihnen. Ich bin nicht sicher, an genau welcher Stelle dieser Fehler verursacht wird, und würde gerne wissen, warum es verursacht wird und wie man es beheben.
Gehen durch meine debug-Anweisungen die erste if-Schleife für countQuery ist auch nicht eingegeben werden, da ein Fehler in meinem sql-syntax in der Nähe in der Nähe '% ? %'
. Allerdings, wenn ich wählen Sie einfach *
anstatt zu versuchen, zu beschränken, basierend auf einer LIKE-Klausel, ich bekomme immer noch die command out of sync-Fehler.
InformationsquelleAutor Joshxtothe4 | 2009-03-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht zwei gleichzeitige Abfragen, da mysqli verwendet Ungepuffert-Abfragen standardmäßig (für vorbereitete Anweisungen; es ist das Gegenteil für Vanille
mysql_query
). Sie können entweder Holen sich die ersten in ein array und eine Schleife durch, oder sagen mysqli-Puffer Abfragen (mit$stmt- > store_result()
).Sehen hier für details.
Sie kann haben zwei gleichzeitige Abfragen - Sie brauchen nur zu laufen
$stmt->store_result();
ich glaube deine Antwort sollte mehr klar.Nahm mich Alter, um diese Informationen heraus - Nein, wo ist es problemlos angezeigt. Danke. Ich habe gerade separates meine Abfragen mit
$select_stmt->close();
um Sie zu Spalten (nicht gleichzeitig, sondern prozessualeSie erklärte, dass "mysqli verwendet unbuffered queries by default". Wie können wir also setzen Sie es auch sonst tun?
Sie können erstellen 2 gleichzeitigen verbindungen und einer ungepufferten vorbereitete Anweisung an jeden, ohne dass die sync-Fehler.
InformationsquelleAutor
Löste ich dieses problem in meiner C-Anwendung - hier ist, wie ich es gemacht habe:
Zitat aus mysql Foren:
Läuft nach meiner Abfrage und den Umgang mit den Ergebnissen [C-API:
mysql_store_result()
] ich Durchlaufen alle weiteren potenziell ausstehenden Ergebnisse erfolgt über mehrere SQL-Anweisung Ausführung wie zwei oder mehr select-Anweisungen (Rücken an Rücken, ohne sich mit den Ergebnissen).Ist die Tatsache, dass mein Verfahren nicht mehrere Ergebnisse zurückgeben, die Datenbank aber keine Ahnung, bis ich ausführen: [C-API:
mysql_next_result()
]. Ich mache das in einer Schleife (für eine gute Maßnahme), bis es wieder null. Das ist, wenn die aktuelle Verbindung handler weiß, es ist okay zum ausführen einer anderen Abfrage (ich mein cache Handler zu minimieren, Verbindung overhead).Dies ist die Schleife, die ich benutze:
Ich keine Ahnung von PHP, aber ich bin sicher, es hat etwas ähnliches.
Danke für die Antwort, die mein problem gelöst. Ich entfernte die Klammer und es funktioniert. Ich habe nicht frei(fetch) oder meine Ergebnisse, aber in der Nähe cursor und neu bauen, wenn ich fertig eine Anweisung der Abfrage.
Wie zu tun, dass im legacy -
mysql
- Erweiterung?Entfernen Sie das Semikolon am Ende der Abfrage fest, die "Commands out of sync; Sie können nicht führen Sie diesen Befehl nun" Problem bei der Verwendung von Python-MySQLdb.
InformationsquelleAutor tracy.brown
Ich hatte heute das gleiche problem, aber nur beim arbeiten mit einer gespeicherten Prozedur. Die Abfrage verhält sich wie ein multi-Abfrage, so müssen Sie zu "verbrauchen", die anderen Ergebnisse sind verfügbar, bevor Sie eine weitere Anfrage.
InformationsquelleAutor stalin beltran
Rufe ich diese Funktion jedes mal vor der Verwendung von $mysqli->query
Arbeiten mit gespeicherten Prozeduren als gut.
danke, das rettete meinen Tag.
InformationsquelleAutor Juergen
Nutze ich CodeIgniter.
Ein server OK ... vllt älter ...
Sowieso mit
Behoben.
Dies nicht "fix" das problem. Es nur verhindert durch das wegwerfen der ganze Zusammenhang und die Verbindung wieder. Ist dies nicht sinnvoll überhaupt vom performance-Standpunkt aus.
InformationsquelleAutor Norman
Das problem ist die MySQL-client-C-Bibliothek, die die meisten MySQL-APIs sind auf gebaut. Das problem ist, dass die C-Bibliothek unterstützt keine gleichzeitige Ausführung von Abfragen, so dass alle APIs auf, die auch nicht. Auch wenn du unbuffered queries. Dies ist ein Grund, warum die asynchrone MySQL-API geschrieben wurde. Es kommuniziert direkt mit dem MySQL-server über TCP und das wire-Protokoll hat unterstützen Sie gleichzeitig Abfragen.
Ihre Lösung ist entweder ändern Sie den Algorithmus, so dass Sie nicht brauchen, um sowohl die Fortschritte auf einmal, oder ändern Sie Sie, um gepufferten Abfragen, das ist wahrscheinlich einer der ursprünglichen Gründe für Ihre Existenz in der C-Bibliothek (die andere ist eine Art cursor).
Sie sind sich nicht abrufen, die Daten von countQuery, das ist, warum es immer noch "in progress". Abrufen, alle Zeilen, oder ändern Sie es zu SELECT COUNT(ARTICLE_NO) und die Zeile. Dann deine zweite Abfrage wird ausgeführt.
Wenn Sie sagen, "die asynchronen MySQL-API", die API beziehen Sie sich? Auch ich bin nicht immer Ihrer Schlussfolgerung. Dieses "problem" behoben werden kann, ohne dass die API asynchron.
Um ehrlich zu sein @Pacerier ich bin mir nicht mehr sicher, ganz das, was ich meinte! Eine Menge ist passiert in den sechs Jahren in der MySQL-Konnektivität, so dass, was ich dachte, ich bezog wurde wahrscheinlich umbenannt und/oder integriert in einige andere neue Treiber.
InformationsquelleAutor staticsan
dieses problem zu lösen, müssen Sie zum speichern von Ergebnis-Daten, bevor Sie es verwenden,
dass alle
InformationsquelleAutor Nader Ben Mabrouk
Für diejenigen, die die vorherigen Antworten nicht helfen... hier ist, was war MEIN PROBLEM!!!!!
param-Bindung wurde "dynamisch" also ich hatte eine variable setzt, die die params-Daten, um zu verwenden bind_param. So, die variable war falsch, aber er wirft eine Fehlermeldung wie "wrong param Daten", heißt es "out of sync bla bla bla" also, ich war verwirrt...
Ich hoffe, dass es jemandem geholfen!
InformationsquelleAutor Ari Waisberg
Einmal hast du
Müssen Sie es schließen, verwenden Sie eine andere Abfrage.
Dieses problem war die Jagd, die mich für Stunden. Hoffentlich wird es fix verkaufen.
InformationsquelleAutor Carl James
Ich denke, das problem ist, dass du machst eine neue Verbindung in der Funktion, und dann schließt nicht ganz am Ende. Warum versuchen Sie nicht, die übergabe in die bestehende Verbindung und re-using?
Andere Möglichkeit ist, dass Sie zurückgeben, aus der Mitte einer while-Schleife abrufen. Sie nie vollständig, die äußere Holen.
ich glaube nicht, dass eine Globale Verbindung ist eine schlechte Praxis
InformationsquelleAutor Paul Tomblin
Überprüfen, um zu sehen, wenn Sie eingeben, werden alle Parameter richtig. Es wirft den gleichen Fehler aus, wenn die Anzahl der Parameter definiert und dann an die Funktion übergeben werden sind unterschiedlich.
InformationsquelleAutor Mixtelf
Dies ist nicht im Zusammenhang mit der ursprünglichen Frage, aber ich hatte die gleiche Fehlermeldung und dieser thread ist der erste Treffer in Google und es dauerte eine Weile, um herauszufinden, was das Problem war, so Kann es von nutzen sein für andere:
ich bin NICHT mit mysqli, immer noch mit mysql_connect
ich hatte einige einfache Abfragen, aber EINE Abfrage, die sämtliche anderen Problemfall zu scheitern innerhalb der gleichen Verbindung.
Ich benutze mysql 5.7 und php 5.6
ich hatte eine Tabelle mit dem Datentyp "JSON". offensichtlich, meine php-version nicht erkennen, die return-Wert aus der mysql (php-einfach nicht wissen, was zu tun mit dem JSON-Format, da die eingebaute mysql-Modul zu alt war (glaube ich zumindest))
ich jetzt geändert das JSON-Feld-Typ Text (wie denn nun brauche ich nicht die native mysql JSON-Funktionalität) und alles funktioniert
InformationsquelleAutor mech
Wenn Sie entweder Gepuffert oder Ungepuffert ResultSet für das abrufen von Daten, müssen Sie zuerst einfach deaktivieren Sie die abgerufenen Daten aus dem Speicher sobald Sie abgerufen haben, alle Daten. Als Sie nicht erfüllen können, anderen MYSQL-Prozedur über die gleiche Verbindung, bis Sie klar die abgerufenen Speicher. Fügen Sie diese unter Funktion der rechten Ende der Skript, so wird es das problem lösen
Referenz von den PHP-Dokumentation
InformationsquelleAutor Kaz
Lief ich in diese Fehler mit Doctrine DBAL QueryBuilder.
Ich eine Abfrage erstellt mit QueryBuilder, die verwendet Spalte subselects, auch erstellt mit QueryBuilder. Die subselects wurden nur erstellt, über
$queryBuilder->getSQL()
und nicht ausgeführt. Der Fehler passiert auf der Anlage des zweiten untergeordneten select-Anweisung. Durch die vorläufig zur Ausführung jeder Anweisung ausgewertet mit$queryBuilder->execute()
vor der Verwendung$queryBuilder->getSQL()
, hat alles geklappt. Es ist, als ob die Verbindung$queryBuilder->connection
bleibt in einem ungültigen Status für die Erstellung eines neuen SQL vor der Ausführung der derzeit vorbereitete SQL, trotz der neuen QueryBuilder-Instanz auf jedem untergeordneten select-Anweisung.War meine Lösung zu schreiben, die subselects ohne QueryBuilder.
InformationsquelleAutor Fabian Picone
Mein problem war, dass ich mit der ersten Anweisung vorbereiten und dann war ich mit mysqli query auf der gleichen Seite und war immer der Fehler "Commands out of sync; Sie können nicht führen Sie diesen Befehl jetzt". War der Fehler nur dann, wenn ich mit den code, der hatte Anweisung vorbereiten.
Was ich Tat, war die Frage schließen. und es hat funktioniert.
mysqli_stmt_close($stmt);
Mein code
get_category.php (hier mit prepare-Anweisung )
admin_get_category_body.php (hier mysqli)
Etwas, das gerade in den Sinn gekommen, ich bin auch wieder hinzufügen von Verbindungs-Variablen per global $Verbindung;. Also ich denke im Grunde eine ganz neue Reihe von Abfrage-system gestartet wird, nach Beendigung der prepare-Anweisung mit mysqli_stmt_close($stmt); und auch ich bin das hinzufügen dieser Dateien und andere Sachen per include
get_category.php (hier mit prepare-Anweisung ) pastebin.com/BiWysdYz admin_get_category_body.php (hier mysqli) pastebin.com/Pwm30icm Hinweis: Kann nicht mit posten der Codes aufgrund der Beschränkung
Etwas, das gerade in den Sinn gekommen, ich bin auch wieder hinzufügen von Verbindungs-Variablen per global $Verbindung;. Also ich denke im Grunde eine ganz neue Reihe von Abfrage-system gestartet wird, nach Beendigung der prepare-Anweisung mit mysqli_stmt_close($stmt); und auch ich bin das hinzufügen dieser Dateien und andere Sachen per include.
Bitte Bearbeiten Sie diese in Ihre Antwort. 😉
InformationsquelleAutor Mahad Ali