2016-04-20 14 views
0

Ich arbeite an einer Website; Apache fragt mich, auf die neue Methode von PDO zu aktualisieren.Schwerwiegender Fehler: Aufruf einer Memberfunktion prepare() für eine ganze Zahl

Ich habe meine Funktion, die alle Informationen von Benutzer X sammeln wird, angezeigt durch die Variable $ _SESSION ['Benutzername'].

Mein Problem ist: Ich bekomme den Fehler Titel. Ich möchte jedoch String- und INT-Werte sammeln.

Meine Funktion: functions.php

function getDetails($username) { 
    $db = require("dbConn.php"); 
    $sql = $db->prepare("SELECT * FROM `es42_members` WHERE HandleName='$username'"); 
    $sql->execute(); 
    $row = $sql->fetchAll(); 

    return $row; 
} 

Meine Index-Datei: index.php

$details = getDetails($_SESSION['username']); 

while ($row = $details->fetch_assoc()) { 
    $id = $row['UserID']; 
    $email = $row['Email']; // This return String 
    $isAdmin = $row['isAdmin']; //This return 0 - 1. But in the table is registered by String (Varchar). 
} 

echo "Your email is: $email"; 
if($isAdmin == "1"){ echo "You are a admin!" } 

UPDATE Mein neuer Code ist wie folgt:

Funktion: @Marcus

function getDetails($username) { 
    require("dbConn.php"); 
    $sql = $db->prepare("SELECT * FROM `es42_members` WHERE HandleName='$username'"); 
    $sql->execute(); 
    $row = $sql->fetchAll(); 

    return $row; 
} 

dbConn.php [Original]

<?php 

$db = new PDO('mysql:host=localhost;dbname=ProfileTest', "root", "1234"); 
$db = null; 

?> 

dbConn.php [Edited und Arbeits]

<?php 

$db = new PDO('mysql:host=localhost;dbname=ProfileTest', "root", "1234"); 

?> 
+0

Schauen Sie sich an, was der Fehler sagt. 'Aufruf an eine Elementfunktion prepare() für ganze Zahlen. Das bedeutet, dass $ db eine Ganzzahl und keine Datenbankverbindung ist. – Mike

+0

Außerdem möchten Sie normalerweise nur einmal pro Anforderung eine Verbindung zu Ihrer Datenbank herstellen und diese als Parameter an eine Funktion übergeben, die sie benötigt, oder sie als Klasseneigenschaft speichern. Wenn Sie Ihre Verbindung in Ihre 'getDetails'-Funktion einfügen, steht sie nicht für die Wiederverwendung an anderer Stelle in Ihrem Skript zur Verfügung. – Mike

+0

Gehen Sie durch Ihre 'dbConn.php' Datei Zeile für Zeile und ich denke, der Fehler ist ziemlich offensichtlich. Komm schon, du versuchst es nicht mal hier. – Mike

Antwort

1

Dies geschieht, weil $db nicht tatsächlich das Objekt PDO Verbindung zu halten. Sie haben das Skript dbConn.php selbst zugewiesen (gibt 1 bei erfolgreicher Einfügung) an $db zurück, weshalb Sie den fraglichen ganzzahligen Fehler erhalten.

Ihre dbConn.php Datei sollte in etwa wie folgt (zur Überprüfung fügen Sie bitte dbConn.php zu Ihrem ursprünglichen Post) aussehen:

// dbConn.php 
$db = new PDO($dsn, $user, $password); // PDO has been instantiated and $db is holding the object 

Dann in Ihrem functions.php Skript:

function getDetails($username) { 
    require("dbConn.php"); // require me, don't assign me to a variable 
    $sql = $db->prepare("SELECT * FROM `es42_members` WHERE HandleName='$username'"); 
    $sql->execute(); 
    $row = $sql->fetchAll(); 

    return $row; 
} 

, würden Sie einfach erforderndbConn.php und nicht zu einer Variablen zuweisen.

0

Da Ihre Fehlermeldung sagt

"Fatal error: Call to a member function prepare() on integer"

Ich gehe davon aus der Fehlermeldung erscheint in Ihrer getDetails Funktion, wo Sie "sql = $db->prepare ..."

So ist der Fehler rufen steht vor der Tür von Ihrem $ db Variable. Poste deine "dbConn.php" Datei für weitere Details.

Verwandte Themen