Intelfanatiker: FEHLER Call to a member function prepare() on a non-object

Hallo,

ich habe folgende Fehlermeldung und kann damit nicht wirklich etwas anfangen.

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

Warum kann ich es nicht in eine Funktion binden?

function Einzelseite_MYSQL_Entsorgung()  
{  
if (mysqli_connect_errno() == 0)  
{  
$sql = 'SELECT * FROM `daten` WHERE id = (?)';  
  
// Statement vorbereiten  
$ergebnis = $db->prepare( $sql );  
  
// Holen wir das Feld der FahhandelsID  
$ergebnis->bind_param( 's', $fachhandelid );  
  
// an die DB schicken  
$ergebnis->execute();  
  
// Ergebnis an Variablen binden  
$ergebnis->bind_result( $id, $firma, $strasse, $plz, $ort, $kreis, $tel, $fax, $ansprechpartner, $oeffnung_mo, $oeffnung_di, $oeffnung_mi, $oeffnung_do, $oeffnung_fr, $oeffnung_sa, $oeffnung_so, $hinweis, $p1, $p2 );  
  
// Ergebnisse ausgeben  
while ($ergebnis->fetch())  
  
{  
  
}  
  
}  
  
else  
  
{  
  
// Es konnte keine Datenbankverbindung aufgebaut werden  
  
echo 'Die Datenbank konnte nicht erreicht werden. Folgender Fehler trat auf: <span class="hinweis">' .mysqli_connect_errno(). ' : ' .mysqli_connect_error(). '</span>';  
  
}  
}
  1. Call to a member function prepare() on a non-object

    Wahrscheinlich weils $db nicht gibt. Dann geht auch $db->prepare nicht.

    1. Call to a member function prepare() on a non-object
      Wahrscheinlich weils $db nicht gibt. Dann geht auch $db->prepare nicht.

      Hallo,

      doch gibt es, es kommt aus der db.php die auch includet wird (vor der funktion.php) oder klappt das so nicht?

      1. Ich glaub nicht dass $db schon existiert? Du musst das sicher erst irgendwie erzeugen. Hab von oo-php nicht viel Ahnung, also Syntax und so. Schau dir mal irgendwo ein Beispiel an, da steht sicher sowas wie $db = new irgendwas...

      2. Hi,

        Wahrscheinlich weils $db nicht gibt. Dann geht auch $db->prepare nicht.

        doch gibt es, es kommt aus der db.php die auch includet wird (vor der funktion.php)

        Es gibt eine Variable $db - aber die enthält nicht das, was du erwartest.

        oder klappt das so nicht?

        *Ob* das Herstellen einer Verbindung zur Datenbank geklappt hat, oder nicht, das musst *du* überprüfen (und wenn nicht, entsprechend darauf reagieren).
        Also informiere dich, wie man das bei der von dir verwendeten Datenbank-Schnittstelle macht.

        MfG ChrisB

        --
        “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
      3. Hallo!

        doch gibt es, es kommt aus der db.php die auch includet wird (vor der funktion.php) oder klappt das so nicht?

        Aber $db dürfte keine Instanz dessen sein, was Du benötigst - es ist kein Objekt laut der Fehlermeldung.

        Was sagt

          
        var_dump($db);  
        
        ~~~?  
        Ciao  
          
        GG
        
        -- 
        "If I do not seek to understand what is happening here  
        - then I've got peanuts in my head!"  
        (I. Hosein) 
        
  2. Hi!

    ich habe folgende Fehlermeldung und kann damit nicht wirklich etwas anfangen.
    Call to a member function prepare() on a non-object

    Wie die anderen schon sagten, diese Variable gibt es nicht. Wann immer du von PHP eine Meldung bekommst, die deiner Meinung nach nicht sein kann, kannst du davon ausgehen, dass PHP immer Recht hat und deine Meinung nicht stimmt. Prüf dann nach, was wirklich ist: mach eine Kontrollausgabe mit var_dump(). Außerdem solltest du immer das error_reporting auf E_ALL stehen haben (und display_errors auf on), damit dir PHP Notice-Meldungen ausgeben kann, die dich über Zugriffe auf nicht vorhandenes informieren.

    Warum kann ich es nicht in eine Funktion binden?
    function Einzelseite_MYSQL_Entsorgung()
    [...]

    Um den ersten Satz meiner Antwort zu präzisieren: Die Variable gibt es in diesem Scope nicht. Funktionen haben nämlich ihren eigenen. Alles was draußen existiert, exisitiert innerhalb einer Funktion erst einmal nicht. Wenn du etwas von draußen benötigst, übergib es als Parameter. Eine schlechte Alternative wäre, mit global auf äußere Variablen zuzugreifen. Das ist deshalb schlecht, weil diese Funktion dann von äußeren Bedingungen abhängig ist und nicht mehr einfach wiederverwendet werden kann.

    Lo!