In meiner lokalen / Entwicklungsumgebung führt die MySQLi-Abfrage OK aus. Wenn ich es in meine Webhostumgebung hochlade, erhalte ich folgende Fehlermeldung
Schwerwiegender Fehler: Aufruf einer Memberfunktion bind_param () für ein Nichtobjekt in ...
Hier ist der Code:
global $mysqli;
$stmt = $mysqli->prepare("SELECT id, description FROM tbl_page_answer_category WHERE cur_own_id = ?");
$stmt->bind_param("i", $cur_id);
$stmt->execute();
$stmt->bind_result($uid, $desc);
Um meine Abfrage zu überprüfen, habe ich versucht, die Abfrage über das Bedienfeld phpMyAdmin auszuführen. Das Ergebnis ist in Ordnung.
Antworten:
63 für die Antwort № 1Zuallererst haben Sie immer diese Leitung, bevor MySQLi eine Verbindung herstellt alle Ihre Umgebungen:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
Danach werden alle MySQL-Fehler übertragenin PHP-Ausnahmen. Eine nicht erfasste Ausnahme macht wiederum einen schwerwiegenden PHP-Fehler. Im Falle eines MySQL-Fehlers erhalten Sie daher einen herkömmlichen PHP-Fehler. Dadurch werden Sie sofort auf die Fehlerursache aufmerksam gemacht. Ein Stack-Trace führt Sie an die Stelle, an der der Fehler aufgetreten ist.
Beachten Sie, dass Sie sehen können müssen PHP-Fehler im Allgemeinen. Und hier geht es in der Tat um verschiedene Umgebungen:
Auf einer Live-Site müssen Sie einen Blick in die Fehlerprotokolle werfen
error_reporting(E_ALL); ini_set("display_errors", 0); ini_set("log_errors", 1);
Auf einem lokalen Entwicklungsserver ist es in Ordnung, Fehler auf dem Bildschirm zu machen:
error_reporting(E_ALL); ini_set("display_errors", 1);
Und eine kleine Liste von dir sollte nicht:
- Verwenden Sie den Fehlerunterdrückungsoperator (
@
) - Benutzen
die()
oderecho
oder eine beliebige andere Funktion, um die Fehlermeldung bedingungslos auf dem Bildschirm zu drucken. PHP kann dies bereits gut ausdrücken, es ist keine Unterstützung erforderlich. - Testen Sie das Abfrageergebnis manuell (z. B.
if($result)
) macht einfach keinen Sinn. Entweder ist Ihre Abfrage fehlgeschlagen und Sie erhalten bereits die Fehlerausnahme, oder es war in Ordnung und es gibt nichts zu testen. - Verwenden Sie try..catch, um die Fehlermeldung zu wiederholen. Wieder kann PHP es besser machen, viel besser.