Fatal error: Call to a member function bindValue() on a non-object

  • :hallo: werte Community


    habe mit folgendem PHP Code das im Titel beschriebene Problem :



    Wie im Titel beschrieben erhalte ich den Fehler : "Fatal error: Call to a member function bindValue() on a non-object in E:\xampp\htdocs\1proj\classes\article.php on line 107" (107 entspricht der 6 Zeile im oben geposteten PHP Code)


    Kann mir da wer Helfen ?


    Danke schon mal im Voraus.


    Rene

  • Auszug aus der Doku von PDO::prepare

    Zitat


    If the database server successfully prepares the statement, PDO::prepare() returns a PDOStatement object. If the database server cannot successfully prepare the statement, PDO::prepare() returns FALSE or emits PDOException (depending on error handling).


    Und was hat da ein mysql_real_escape_string zu suchen???

  • Und was hat da ein mysql_real_escape_string zu suchen???


    Das ist definitiv nicht das was den Fehler verursacht, denn der Fehler kommt auch nach dem mysql_real_escape_string entfernt wurde und wozu das gut ist : "Maskiert spezielle Zeichen im unescaped_string unter Berücksichtigung des aktuellen Zeichensatzes der Verbindung, so dass das Ergebnis ohne Probleme in mysql_query() verwendet werden kann. Wenn Sie Binärdaten einfügen wollen, müssen Sie die Funktion auf jeden Fall verwenden."


    Und entschuldige bitte, aber dein Zitat ist auch nicht sehr hilfreich.

  • Aha, du nutzt also PDO mit SQLite und nimmst dann mysql_real_escape_string? Wenn du meinst...


    Und was hilft dir an dem Zitat nicht??? Daraus kann man wohl schließen, dass

    PHP
    1. $st = $conn->prepare( $sql );


    in die Hose geht. Auch wenn dir das dann auch nicht weiterhelfen wird:


    Richtig debuggen



    • Man bemerkt, dass ein Skript nicht das tut, was es soll.
    • Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
    • Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
    • Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
    • An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
    • Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
    • Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
    • Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
    • Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.

  • Und was hilft dir an dem Zitat nicht??? Daraus kann man wohl schließen, dass

    PHP
    1. $st = $conn->prepare( $sql );


    in die Hose geht. Auch wenn dir das dann auch nicht weiterhelfen wird:


    Richtig debuggen


    Es hilft nicht weil mir das bekannt ist. Mir ist auch klar das die SQL Query der Fehlerpunkt ist. Nenne es von mir aus Betriebsblindheit aber ich sehe es nicht.


    Was "PDO mit SQLite und nimmst dann mysql_real_escape_string" an geht, benutz mal Google und du wirst einige Tut's und Beiträge finden die das behandeln und auch wenn es dich überrascht es funktioniert und das nicht nur bei 8 anderen abfragen im restlichen Script sondern auch bei anderen Projekten die nicht aus meiner Feder stammen.


    Das ganze Script, in verschieden Dateien aufgeteilt, umfasst ohne Kommentare ca. 6.400 Zeilen PHP-Code und "error_reporting(-1);" so wie "ini_set('display_errors', true)" sind natürlich in der aufrufenden index.php eingetragen.. Das Code war ursprünglich für mysql ausgelegt und soll nun auf Wunsch auf SQLite umgestellt werden. Insgesamt gibt es im Code 83 sql abschnitte, hab ich alle bereits zum laufen bekommen, nur diese eine, letzte abfrage bekomme ich nicht auf SQLite umgeschrieben.



    Ich meine das jetzt nicht Böse aber deine Auflistung im Schulmeister Style :

    • Man bemerkt, dass ein Skript nicht das tut, was es soll.
    • Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
    • Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
    • Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
    • An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
    • Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
    • Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
    • Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
    • Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.


    sowas ist ziemlich beleidigend für jemanden der schon zu "Pre C64" Zeiten als Programmierer tätig war, ok das konntest du nicht wissen und genau deshalb hättest du vorher mal Fragen können.


    Auch du scheinst ja den Fehler nicht zu sehen.


    Gruß Rene

  • Tja, dann lügt wohl die PHP-Doku:

    Zitat

    Note:
    A MySQL connection is required before using mysql_real_escape_string() otherwise an error of level E_WARNING is generated, and FALSE is returned. If link_identifier isn't defined, the last MySQL connection is used.

  • Auch wenn Du Moderator bist : Also echt da schaust du in eine Docu und meinst die Weisheit mit löffeln gefressen zu haben.


    Ich habs doch oben schon geschrieben, selbst wenn ich es raus nehme und "sqlite_escape_string()" verwende bleibt der Fehler.


    Wenn du nix zu sagen hast was zur Lösung beiträgt dann spar dir dein Geschreibsel doch.


    Gruß

  • Wenn du deine unfreundlichen Kommentare nicht langsam sein lässt, ist hier ganz schnell zu!


    Dann mach doch zu. Aber ich brauche mich echt nicht von jemanden auf solch Arrogante Art Schulmeistern zu lassen der selber nicht weis, oder aus Gehässigkeit nicht sagen will, was da falsch laufen könnte.


    Alles was du geschrieben hast ist in der Angelegenheit entweder unangemessen gewesen oder zeug davon das du keine Ahnung hast. Habe mittlerweile einige deiner anderen Postings gelesen, und dieses Schulmeisterhafte Art zieht sich Quer durch die Meisten deiner Beiträge die ich gelesen habe.


    Du hast zwar das Hausrecht da du Moderator bist aber selbst als solcher sollte man seinen Gästen ohne Arroganz begegnen und nicht meinen jeden wie einen Erstklässler behandeln zu können. Du solltest dir mal dein eigenes Profilbild zu Herzen nehmen.


    Gruß

  • Jetzt pass mal schön auf!!!
    Du klatsch hier einen Quellcode und eine Fehlermeldung rein. Allerdings sieht mal nichts, aber absolut garnichts davon, das du in irgendeiner Form "Richtig debuggen" angewendet hast.
    Und dass mysql_real_escape_string definitiv falsch ist, darüber müssen wir wohl nicht mehr reden.
    Aber du empfindest das schon als beleidigend, wenn man dir "Richtig debuggen" schreibt. Woher soll ich wissen, dass du das schon gemacht hast? Ich sehe nix davon.
    Und wenn du der große Hero bist und mal die Doku lesen würdest, hättest du dir schon längst mal die Fehlerbehandlung von PDO angesehen. Aber auch davon ist in dem Quellcode nichts zu sehen.
    Ich wiederhole mich ja gerne:

    Zitat

    If the database server cannot successfully prepare the statement, PDO::prepare() returns FALSE or emits PDOException (depending on error handling).


    Da steht was von PDOException. Wo setzt du das ein?


    Außer unfreundliche Sprüche ist von deiner Seite hier mal rein garnichts gekommen!!!

  • Zu PDOException -> http://php.net/manual/de/class.pdoexception.php (wozu soll ich mir die Finger wund tippen)


    Du glaubst echt jeder ist so wie du und übersieht das Offensichtliche.


    Mach den Beitrag zu habe das Problem schon um 13 Uhr gelöst indem ich den Vorgang/Abfrage in zwei teile geteilt habe.


    Du solltest echt mal an deiner Art Feilen, im realen Leben hast du sicher nicht viele Freunde.