Wie kann ich die Ergebnisse einer MySQLi prepared statement in ein assoziatives array?
Ich habe eine sql-Abfrage und eine mysqli prepared statement:
$sql = 'SELECT photographers.photographer_id, photographers.photographer_name
FROM photographers';
$stmt = $conn->stmt_init();
if ($stmt->prepare($sql)) {
$stmt->bind_result($photographer_id, $photographer_name);
$OK = $stmt->execute();
$stmt->fetch();
}
Wie kann ich speichern das Ergebnis in einem assoziativen array, so kann ich die Schleife, die Sie später und bekommen alle Daten zurückgegeben, die von der sql-string?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie Folgendes:
Zunächst erhalten Sie die Abfrage von Metadaten und von diesem erhalten alle Felder, die Sie geholt habe (Sie könnten dies manuell tun, aber dieser code funktioniert für alle Abfragen, anstatt mit der hand). Die
call_user_func_array()
Funktion ruft diemysqli_stmt::bind_result()
Funktion für Sie auf jeden dieser Parameter.Danach ist es nur eine Frage der durch jede Zeile und erstellen Sie ein assoziatives array für jede Zeile und hinzufügen, dass zu einem array was in allen die Ergebnisse.
$params[] = &$row[$field->name];
aus?Update: Seit PHP 5.3.0 kann man eine mysqli_result-Objekt, das eine Methode fetch_array.
Dokumentation: http://php.net/manual/en/mysqli-stmt.get-result.php
Stieß ich auf diese Diskussion, um eine Lösung zu finden, um Daten von MySQLi prepared statements, ohne die mysqlnd. Ich habe die Entwicklung einer Klasse für die Handhabung von prepared statements mit MySQLi in einer praktischen Art und Weise. Bitte, werfen Sie einen Blick auf den code, oder es einfach (sehen Sie ein Beispiel für die Verwendung am Ende von dem Stück code) zu schnell schreiben, prepared statements und bekommen Ihre Ergebnisse.
Seltsam genug, Sie nicht können. Es gibt einfach keine Möglichkeit, um eine mysqli_result-Objekt aus einem mysqli_stmt-Instanz. Ich habe immer als diese eine große Schwachstelle, und würde vermuten, dass dies einer der Hauptgründe dafür, dass mysqli-nie erreicht echte Popularität. In diesen Tagen ist es ziemlich abgelöst von PDO, die tut, was Sie wollen, mit Anstrengung.
Edit: Meine Antwort bedeutet nur, dass Sie es nicht tun können standardmäßig. Natürlich können Sie es selbst implementieren, wie Chris vorgeschlagen. Trotzdem, ich glaube, Sie sollten PDO statt, wenn es überhaupt möglich ist.
Wenn Sie nicht verwenden können die PDO-Erweiterung. Oder Sie Probleme beim Aufbau Ihrer Datenbank-Klasse mit vorbereiteten Anweisungen sind.
Wie die Verwendung für einfügen, aktualisieren, löschen und einfügen:
Fetch funktioniert etwas anders
Nun für die Datenbank-Klasse
Ich hoffe, das ist hilfreich
Eine einfache eine, die tatsächlich überraschend funktioniert. Ich weiß, es ist prozedurale, aber trotzdem:
https://stackoverflow.com/users/5849505/carl-gentleman
Seine Antwort ist eine Möglichkeit, die für Vorherige Versionen von php als "call_user_method_array" wurde DEPRECATED in PHP 4.1.0 und ENTFERNT PHP-7.0.0.
Also ich finde, dass es wichtig ist zu veröffentlichen eine aktualisierte Antwort, zumindest für PHP7, da ich vor kurzem gefunden, die mich ohne den nativen Treiber MYSQLND für die MYSQLI-Erweiterung auf einen neuen host habe ich übertragen. Yay!...
Hinweis: Es gibt 2 Funktionen hier. Der Letzte ist erforderlich. Es ist der einzige Weg, ich weiß, es alle zu arbeiten.
(BEARBEITEN Der Antwort nicht produzieren ein assoziatives array... Fest)