Ich bin total verwirrt von mySQLi. Obwohl ich seit Jahren prozedurale mysql-Aufrufe verwende, möchte ich mich daran gewöhnen, vorbereitete Anweisungen für den angebotenen db security / mySQL-Injektionsschutz zu erstellen. Ich versuche, eine einfache Select-Anweisung zu schreiben (ja, ich weiß, dass ich einen prozeduralen Aufruf für diese Leistungsverbesserung mache). Wenn ich gelaufen bin, bekomme ich alle Echos, bis ich die Komponente $result = $stmt->get_result();
getroffen habe. Alles scheint mir ziemlich einfach zu sein, aber ich bin nach Stunden des Lesens von Handbüchern auf mySQLi ratlos. Irgendwelche Ideen, warum das scheitern würde?
* Hinweis: Dies ist eine Testumgebung und während keine Bereinigung / Entkommen von Zeichen stattfindet, übergebe ich nur gültige Inhalte in die Variablen $ username und $ email. Und außerdem habe ich überall nach SO gesucht, um die Lösung für mein Problem zu finden.
%Vor%Muss ich jedes Mal, wenn ich eine Funktion aufruft, ein mysqli instanziieren? Ich nehme an, sie sind nicht persistent db verbindet wie in prozeduralen mysql. Ja, mir ist bewusst, dass dies ein Bereichsproblem ist, und nein, ich konnte das Scoping dieser Klassenvariablen nicht verstehen. Wenn ich es außerhalb der Funktion deklarierte, war es nicht verfügbar, als ich in die Funktion kam.
AKTUALISIEREN wenn ich Zeile 12 ändere von:
%Vor%zu:
%Vor%Ich bekomme Statement NICHT vorbereitet. Jetzt bin ich noch verwirrter ....
UPDATE: Ich kontaktierte meinen Hosting-Provider und anscheinend wird mySQLi unterstützt, und der mysqlnd-Treiber ist vorhanden. Vielleicht gibt es eine Möglichkeit, das einfach zu testen? Obwohl sie mir in der Vergangenheit normalerweise ziemlich gute Antworten gegeben haben.
UPDATE ... AGAIN: Ich habe meine Server-Fähigkeiten selbst überprüft und festgestellt, dass mysqlnd nicht vorhanden ist, während mysqli und PDO vorhanden sind. So verstehe ich, warum get_result () nicht funktioniert (mysqlnd erforderlich, denke ich), ich verstehe immer noch nicht, warum die vorbereitete Anweisung selbst nicht funktionieren wird.
Obwohl mysqli auf meinem Host installiert ist, ist der mysqlnd-Treiber offensichtlich nicht vorhanden. Daher kann get_result () nicht verwendet werden (php manual definiert get_result als mysqlnd-abhängig), und stattdessen müsste eine extra Codierung vorgenommen werden, um mein Ergebnis so zu behandeln, wie ich es möchte.
Deshalb habe ich beschlossen, zu versuchen und zu lernen, wie PDO funktioniert, und innerhalb von Minuten, voila !!!
Ersetzte den obigen Code durch Folgendes:
%Vor%So viel Fehlerüberprüfung, wie ich mir vorstellen konnte, und überhaupt keine Probleme!
Endgültiger Code
%Vor%Was ist deine PHP-Version? Sie sollten dies überprüfen:
Was ist los mit mysqli :: get_result?
Scheint wie ein etwas zu viel-zu-up-to-date-Ding.
Tags und Links php prepared-statement mysqli