dedlfix: $ergebnis->bind_result alle Variablen sind leer

Beitrag lesen

Hi!

$ergebnis = $db->prepare($sql);
$ergebnis->bind_param('s',$Klasse);
Ich bekomm hier aber diese Fehlermeldung:
Fatal error: Call to a member function bind_param() on a non-object
also auf das bind_param() in der zweiten Abfrage.

Genau das meinte ich mit Fehlerbehandlung (oder auch robuster Programmierung genannt). mysli::prepare() liefert etwas zurück, dass einmal ein mysqli_stmt-Objekt sein kann, aber auch false, wenn ein Fehler auftritt. Du prüfst das nicht und verwendest $ergebnis einfach so, als ob immer alles in bester Ordnung ist. Die Folge ist der Folgefehler, den du da siehst. Die eigentliche Ursache bekommst du durch Auswertung von mysqli::error (in deinem Fall $db->error).

Schau dir das Beispiel zu mysqli::prepare(), da ist zumindest schon mal das weitere Arbeiten mit dem Statement-Objekt vom Rückgabewert abhängig gemacht worden.

muss ich nach der ersten Abfrage noch was machen oder reicht es mit
$ergebnis->close(); ??

Das wäre eine Möglichkeit. Wie das Handbuch zu mysli_stmt::close() mitteilt, werden dabei alle "pending and unread results" verworfen, so dass du das nächste Statement ausführen kannst. Alternativ - siehe Hinweis mysqli_stmt::fetch() kannst du auch mysli_stmt::store_result() aufrufen, um das Ergebnis vom Server abzuholen und lokal puffern zu lassen. Das ist vor allem dann nötig, wenn man während des Fetch-Vorgangs weitere Statements absetzen will (was man aber meist eine unperformante Idee ist).

Die eigentliche Frage ist aber: warum fragst du das DBMS nach Dingen, die du am Ende doch gar nicht wissen willst?

Lo!