Wie kann ich die Ergebnisse einer vorbereiteten MySQLi-Anweisung in ein assoziatives Array einfügen?

8

Ich habe eine SQL-Abfrage und eine mysqli vorbereitete Anweisung:

%Vor%

Wie kann ich die Ergebnisse in einem assoziativen Array speichern, so dass ich sie später wiederholen kann, um alle Daten zu erhalten, die von der SQL-Zeichenfolge zurückgegeben werden?

    
zeckdude 14.06.2009, 23:34
quelle

6 Antworten

30

Versuchen Sie Folgendes:

%Vor%

Zuerst erhalten Sie die Abfrage-Metadaten und erhalten von dort alle Felder, die Sie abgerufen haben (Sie könnten dies manuell tun, aber dieser Code funktioniert für alle Abfragen, anstatt von Hand zu erstellen). Die Funktion call_user_func_array() ruft das mysqli_stmt::bind_result() funktioniert für Sie bei jedem dieser Parameter.

Danach geht es nur noch darum, durch jede Zeile zu laufen und für jede Zeile ein assoziatives Array zu erstellen und dieses einem Array hinzuzufügen, was zu allen Ergebnissen führt.

    
Chris 14.06.2009, 23:56
quelle
5

Update: Seit PHP 5.3.0 können Sie ein mysqli_result-Objekt erhalten, das eine fetch_array-Methode bereitstellt.

%Vor%

Dokumentation: Ссылка

    
maikel 19.07.2014 07:36
quelle
1

Seltsamerweise können Sie nicht. Es gibt einfach keine Möglichkeit, ein mysqli_result-Objekt von einer mysqli_stmt-Instanz zu erhalten. Ich habe das immer als einen großen Fehler betrachtet und vermutete, dass dies einer der Hauptgründe dafür ist, dass mysqli nie wirkliche Popularität erreicht hat. Heutzutage ist es von PDO ziemlich abgelöst worden, welches das, was Sie wollen, ohne Anstrengung erledigt.

Bearbeiten: Meine Antwort bedeutet nur, dass Sie dies standardmäßig nicht tun können. Natürlich können Sie es selbst implementieren, wie Chris vorgeschlagen hat. Trotzdem, ich denke du solltest stattdessen PDO benutzen, wenn es überhaupt möglich ist.

    
Emil H 14.06.2009 23:48
quelle
1

Wenn Sie die PDO-Erweiterung nicht verwenden können. Oder Sie haben Probleme beim Erstellen Ihrer Datenbankklasse mit vorbereiteten Anweisungen. Wie verwende ich für das Einfügen-Update, löschen und einfügen:

%Vor%

Fetch funktioniert etwas anders

%Vor%

Nun zur Datenbankklasse

%Vor%

Ich hoffe, das ist hilfreich

    
Mike Smit 25.04.2012 08:31
quelle
1

Ich bin auf diese Diskussion gestoßen, um eine Lösung zu finden, um Daten aus MySQLi vorbereiteten Anweisungen ohne mysqlnd zu erhalten. Ich habe eine Klasse für den Umgang mit vorbereiteten Anweisungen mit MySQLi auf praktische Weise entwickelt. Werfen Sie einen Blick auf den Code oder verwenden Sie ihn einfach (siehe ein Anwendungsbeispiel am Ende des Codeabschnitts), um vorbereitete Anweisungen schnell zu schreiben und die Ergebnisse zu erhalten.

%Vor%     
Carl Gentleman 28.01.2016 00:11
quelle
0

Ein einfacher, der tatsächlich überraschend funktioniert. Ich weiß, es ist verfahrenstechnisch, aber immer noch:

%Vor%     
Hazzdood 01.08.2016 07:39
quelle