PHP mysqli_stmt::get_result funktioniert nicht

lordg2009

Lt. Commander
Registriert
Apr. 2009
Beiträge
1.512
Hi

Folgender Code:
PHP:
$query = "SELECT * FROM exams";
$stmt = $mysqli->prepare($query);
$stmt->execute();
$result = $stmt->get_result();

Ich habe herausgefunden, dass es an dem 4. Befehl liegt. Alles was nach diesem Befehl im Script steht, wird nicht mehr ausgeführt.

Die dritte Zeile '$stmt->execute(); erzeugt keinen Fehler ($stmt->errno ergibt 0)
Es muss also am get_result() liegen. Aber so, wie ich es genutzt habe, steht es auch in der Dokumentation.

Habt ihr eine Idee?

Vielen Dank

Ergänzung:
Der Code ist abgewandelt und ich würde sehr gerne diesen Befehl nutzen, da ich das Ergebnis als $result weiterverarbeiten möchte, aber trotzdem vorher über $stmt->bind_param(usw.) Parameter hinzufügen möchte.
 
Zuletzt bearbeitet: (Der Code ist abgewandelt und ich würde sehr gerne diesen Befehl nutzen, da ich das Ergebnis als $result weiterverarbeiten)
Das hier beachtet?

Ausschließlich native MySQL-Treiber
Nur in mysqlnd verfügbar.


Ich hab persönlcih noch keinen Server mit mysqlnd erlebt... Tatsächlich beißt sich mysqlnd z.B. in Debian 7 mit einigen anderen Paketen und sorgt für mehr Probleme als die Sache Wert hat.
 
ich habs gelesen, aber es stand irgendwie da, dass der native treiber standardmäßig mit dabei ist, so, dass ich dachte, es gibt kein problem, anscheinend aber doch.

Gibt es sonst irgendeine Möglichkeit, eine statement vorzubreiten (also Parameter einzufügen) und das Ergebnis in ein result Objekt zu bekommen?
 
Schreib dir ne eigene Abstraktion... und nimm nicht mysqli. Das ist zwar immer noch besser als das alte mysql, aber du siehst ja... Fallstricke überall. Nimm PDOs, das löst dich dann auch von dem Zwang, MySQL zu verwenden. Oder willst du dein ganzes Programm umschreiben, bloß weil du mal von MySQL auf PostgreSQL wechselst?
 
Hey, das ist ja cool, was es nicht alles gibt. Und die Syntax ist ja ähnlich, da findet man sich auch schnell zurecht.

Ich hatte sowieso vor, irgendwann auf postgre umzusteigen. Es ist ja jetzt standartmäßig in debian dabei, anstatt von MySQL. Obwohl ich nicht genau weiß, warum, MySQL ist ja auch unter der GNU General Public License zu haben, die Referenz ist wirklich gut geschrieben, es ist populär und es tut seinen Dienst.

Aber Danke dir.
Ich glaube ich schreibe mein Projekt jetzt noch zu mit mysqli zu Ende und dann gehts beim nächsten mit PDO und PostgreSQL weiter
 
Also Debian (6&7) enthält sehr wohl MySQL in den regulären Repositories, und es wird auch direkt installiert, wenn man über tasksel einen LAMP aufsetzt. In Zukunft wird MySQL aber wohl durchweg ersetzt, und zwar durch MariaDB: Binärkompatibel zu MySQL (Drop-In-Replacement), dafür schneller und moderner. MySQL ist tot, Maria sei gesegnet!

PostgreSQL hat 2-3 Nachteile:
- Die meisten Dokumentationen beziehen sich eben auf PHP+MySQL. Es wird schwerer, da mal Problemlösungen auf die Schnelle zu finden.
- Jeder Hoster bietet PHP+MySQL, aber bei ner anderen Sprache oder Datenbank musst du eben genau gucken, obs verfügbar ist.
- So manches CMS läuft nru mit MySQL, denn obwohl PDO eine schöne Brücke über alle RDBMS schlagen sollte unterscheiden sich die SQL-Befehle teilweise eben doch ein wenig, was den Plan "ich schalt einfach in der Config auf PostgreSQL um" teilweise zum Scheitern verurteilt.
 
Ahh ja, sry. Ich meinte folgendes:

Als ich debian 6 installiert habe und während der Installationsroutine ein Kreuz bei Datanbenk gesetzt habe, wurde MySQL installiert. Bei debian 7 war es dann aber postgreSQL.

Wie sieht es bei der Kompatibilität von MariaDB aus? Kann ich meinen Code, der mysqli nutzt auch MariaDB ansprechen, oder ist diese API nicht kompatibel?
 
MariaDB ist, wie schon gesagt, ein Drop-In Replacement für MySQL. Das Ding besteht weitestgehend aus MySQL-Code, wird aber von Monty (MySQL-Schöpfer) aktiv weiter entwickelt, während Oracle MySQL komplett gegen die Wand fahren, wie sie es vorher schon mit OpenOffice gemacht haben, oder mit Java immer noch tun.
 
Zurück
Oben