2016-05-11 10 views
0

Ich schreibe eine Funktion, um nach Datensätzen in meiner Datenbank vor der Ausführung von irgendetwas zu überprüfen, und ich bekomme den Fehler Call to a member function prepare(), die ich nicht ganz verstehe. Ich habe jetzt schon seit geraumer Zeit struggeling, und ich würde wirklich appriciate sollte etwas HilfeDie Logik hinter "Call to a Member Funktion prepare()"

Das Problem mit den 19

<?php 
$dsn = "xxx"; // Database Source Name 
$username="xxx"; // User with acress to database. Root is MySQL admin. 
$password="xxx"; //The user password. 

try { 
    $conn = new PDO($dsn, $username, $password); 
    $conn ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} catch(PDOException $e) { 
    echo "Connection failed: ".$e->getMessage(); 
} 

//------------------------ Does the category already exist? ------------------------- 
function checkuser($fbid,$fbfname,$fblname,$femail) { 

$sql="SELECT COUNT(*) AS subjectcount FROM Users WHERE Fuid=:Fuid"; 

try { 
    $stmt = $conn->prepare($sql); 
    $stmt->bindValue(":Fuid",$_SESSION['FBID'], PDO::PARAM_INT); 
    $stmt->execute(); 
    $row = $stmt->fetch(PDO::FETCH_ASSOC); 
    $subjectcount=$row["subjectcount"]; 
    } catch (PDOException $e) { 
     echo "Server Error - try again!".$e->getMessage(); 
    } 

//------------------------ If it dosn't, insert it ------------------------- 
if ($subjectcount==0) { 

in Linie prepare() sein, und ich habe eine harte Zeit Debugging mit seit Ich verstehe die Ursache dieses Fehlers nicht ganz.

ich meinen Code zu

aktualisiert
<?php 
$dsn = "xxx"; // Database Source Name 
$username="xxx"; // User with acress to database. Root is MySQL admin. 
$password="xxx"; //The user password. 

try { 
    $conn = new PDO($dsn, $username, $password); 
    $conn ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} catch(PDOException $e) { 
    echo "Connection failed: ".$e->getMessage(); 
} 

//------------------------ Does the category already exist? ------------------------- 
function checkuser($fbid,$fbfname,$fblname,$femail) { 
global $conn; 
$sql="SELECT COUNT(*) AS subjectcount FROM Users WHERE Fuid=:Fuid"; 

try { 
    $stmt = $conn->prepare($sql); 
    $stmt->bindValue(":Fuid",$_SESSION['FBID'], PDO::PARAM_INT); 
    $stmt->execute(); 
    $row = $stmt->fetch(PDO::FETCH_ASSOC); 
    $subjectcount=$row["subjectcount"]; 
    } catch (PDOException $e) { 
     echo "Server Error - try again!".$e->getMessage(); 
     exit; 
    } 

//------------------------ If it dosn't, insert it ------------------------- 
if ($subjectcount==0) { 
+0

Ist das die volle Fehlermeldung? –

+0

It's Fatal error: Aufruf an eine Member-Funktion Prepare() auf Null in /var/www/domain/public_html/functions.php in Zeile 19 – frisk0

+0

Ich vermutete, und wenn Sie Fehler Berichterstattung festgelegt, um alle Fehler einschließlich Benachrichtigungen zu melden, dann hättest du den Fehler gesehen, der dir sagt, dass "conn" ebenfalls undefiniert ist. Siehe meine Antwort unten. – CherryDT

Antwort

1

Ich denke, die vollständige Fehlermeldung lautet:

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

Recht?

Sie rufen die Member-Funktion (= Funktion, die ein Mitglied einer Klasseninstanz ist) prepare die variablen $conn, die im Rahmen Ihrer checkuser Funktion wird nicht erklärt, wird es außerhalb erklärt (in globalem Bereich)!

Um „Import“ in Ihre Funktion, so dass Sie darauf zugreifen können, an der Spitze Ihrer Funktion diese Zeile setzen:

global $conn; 

Außerdem ist es, wie Sie vollständige Fehlerberichterstattung aktiviert haben nicht sieht, sonst würden Sie vor dem tödlichen man diesen Fehler gesehen haben, können Sie einen weiteren Hinweis geben:

Notice: Undefined variable: conn 

(By the way, sollten Sie exit; nach der DB Fehlermeldung in Ihrem catch Block outputing - sonst werden Sie den Fehler drucken, aber weiter zum Rest, mit einer nicht vorhandenen DB-Verbindung!)

+0

Danke für deine Antwort CherryDT. Ich habe meinen Code aktualisiert ^^ – frisk0

Verwandte Themen