Aufruf einer Mitgliedsfunktion bind_param() für ein Nicht-Objekt [duplicate]

Lesezeit: 4 Minuten

Ich versuche, eine Variable in dieser vorbereiteten Anweisung zu binden, aber ich erhalte immer wieder den Fehler:

Call to a member function bind_param() on a non-object

Die Funktion wird aufgerufen und ihr werden Variablen übergeben. Wenn ich die Funktion so ändere, dass sie nur die Variable wiedergibt, wird die Variable auf der Seite gut gedruckt, aber wenn ich versuche, sie hier zu binden, erhalte ich den Fehler. Kann jemand helfen?

//CALL FROM PAGE ONE
check($username);

//FUNCTION ON PAGE 2
function check($username){
$DBH = getDBH();
$qSelect = $DBH->prepare("SELECT * FROM users WHERE username = ?");
$qSelect->bind_param("s", $username);
}

Ich weiß, dass die Funktion hier nicht vollständig geschrieben ist, aber das sollte kein Problem sein. Ich verstehe nicht, warum ich diesen Fehler erhalte.

  • var_dump($qSelect) um zu überprüfen, ob es das ist, was Sie denken.

    – Mchl

    20. Dezember 2010 um 8:43 Uhr

Aufruf einer Mitgliedsfunktion bind param fur ein Nicht Objekt duplicate
Stefan

Nun, ein Grund prepare() kann fehlschlagen, wenn die an sie gesendete SQL-Anweisung in der aktuellen DB nicht gültig ist.

prepare() gibt dann false zurück.

ZB – wenn der Tabellenname nicht korrekt ist oder ein oder mehrere Felder in der Abfrage sind nicht vorhanden.

1646880248 787 Aufruf einer Mitgliedsfunktion bind param fur ein Nicht Objekt duplicate
Özi

wie die Fehlermeldung sagt, $qSelect scheint kein Objekt zu sein. Versuchen Sie, dies zu debuggen, indem Sie verwenden var_dump($qSelect); direkt nach Ihrem Vorbereitungsanruf. auch prüfen, ob getDBH() gibt zurück, was Sie brauchen.

hört sich so an, als ob der Vorbereitungsaufruf fehlschlägt (weiß nicht warum) und daher zurückkehrt falsefalse ist kein Objekt, also können Sie nicht anrufen bind_param() auf diesem.

BEARBEITEN: Sie haben die Informationen nicht angegeben, aber es sieht so aus, als würden Sie das PDO von PHP verwenden. Schauen Sie in diesem Fall mal vorbei die Dokumentation.

Wenn der Datenbankserver die Anweisung erfolgreich vorbereitet, gibt PDO::prepare() ein PDOStatement-Objekt zurück. Wenn der Datenbankserver die Anweisung nicht erfolgreich vorbereiten kann, gibt PDO::prepare() FALSE zurück oder gibt PDOException aus (abhängig von der Fehlerbehandlung).

Sie sollten Ihren Server so konfigurieren, dass er diese PDO-Ausnahmen zurückgibt, die Ihnen mitteilen, warum der Vorbereitungsaufruf fehlschlägt.

  • Ja, sein qSelect gibt bool(false) zurück, aber das macht keinen Sinn, weil ich eine Funktion habe, die praktisch gleich ist und gut funktioniert.

    – mcbeav

    20. Dezember 2010 um 9:13 Uhr

  • Hm. Ich war auch in der Situation, eine praktisch gleiche Funktion zu haben. Es stellte sich heraus, dass ich es kopiert und eingefügt hatte, um ein Feld hinzuzufügen. Aber ich habe das Komma vor dem neuen Feld vergessen! Blöder Fehler, aber es zeigt nur, dass es sich möglicherweise nur um einen Tippfehler Ihrerseits handelt.

    – Tom McGee

    30. Januar 2017 um 21:41 Uhr

1646880248 653 Aufruf einer Mitgliedsfunktion bind param fur ein Nicht Objekt duplicate
fvdz

Ich verwende auch den mysqli-Ansatz und habe den gleichen Fehler erhalten, als ich eine weitere Instanz von mysqli erstellt habe, bevor ich die erste Instanz geschlossen habe. Es ist also wichtig, es zu verwenden close() bevor Sie dasselbe Stück Code starten. Zum Beispiel:

$DBH = getDBH();
$qSelect = $DBH->prepare("SELECT * FROM users WHERE username = ?");
$qSelect->bind_param("s", $username);
$qSelect->close();  // <--- use close before calling the same function( wich contains $DBH code) again;

  • und wenn er eine solche Funktion oft verwendet, sollte er meiner Meinung nach reset () anstelle von close () verwenden und Prepare () außerhalb von funcion verschieben, zum Beispiel in den Konstruktor, eine put-Anweisung in die Eigenschaft wie diese: $this- >qWählen Sie .

    – Qdinar

    24. August 2016 um 19:50 Uhr

Es scheint, dass die Vorbereitung ziemlich dumm ist. Es verlässt sich nicht vollständig auf die MySQL-Seite, damit meine ich, wenn Sie in Ihrer Abfrage eine Tabelle haben, die zufällig denselben Namen wie ein Schlüsselwort hat, sagen Sie “Benutzer”, “Bestellung”, … , es erkennt es einfach nicht als Tabelle, sondern als das, was die Schlüsselwortbefehle tatsächlich tun, sodass sich die Abfrage als ein Durcheinander herausstellt und die Vorbereitung einfach fehlschlägt.

Um dies zu beheben, müssen Sie es auf die “richtige” Weise eingeben und “`” auf beiden Seiten des Tabellennamens hinzufügen. Beispiel:

`user`, `order`, `...`

Es ist richtig, aber ich finde es albern, dieses Verhalten zu haben.

Aufruf einer Mitgliedsfunktion bind param fur ein Nicht Objekt duplicate
Maciel Escudero Bombonato

Ich versuche, anderen Leuten mit wenig Erfahrung in PHP wie mir zu helfen.

In meinem Fall ist dieser Fehler aufgetreten, weil ich einen SQL-Syntaxfehler hatte. Der Stack-Trace der Konsole zeigte das Problem nicht.

Als ich das SQL repariert habe, war der Fehler weg.

1646880249 785 Aufruf einer Mitgliedsfunktion bind param fur ein Nicht Objekt duplicate
seine Seiten

Überprüfen Sie die Berechtigungen des Benutzers in der Datenbank. Ein Benutzer ohne „Einfügen“-Berechtigung verursacht beim Einfügen auch einen „Aufruf einer Member-Funktion bind_param() auf einem Nicht-Objekt“-Meldungsfehler.

985750cookie-checkAufruf einer Mitgliedsfunktion bind_param() für ein Nicht-Objekt [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy