2016-04-20 101 views
0

我正在一個網站上工作; Apache要求我升級到PDO的新方法。致命錯誤:調用成員函數prepare()整數

我有我的功能,它將收集用戶X的所有信息,由變量$ _SESSION ['username']表示。

我的問題是:我得到錯誤標題。不過,我想收集字符串和INT值。

我的功能: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; 
} 

我的索引文件: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 我的新代碼如下:

功能:@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 [原創]

<?php 

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

?> 

dbConn.php [編輯和工作]

<?php 

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

?> 
+0

看看錯誤說的是什麼。 '調用成員函數prepare()在整數'上。這意味着'$ db'是一個整數,而不是數據庫連接。 – Mike

+0

另外,您通常只希望每個請求連接到數據庫一次,並將其作爲參數傳遞給需要它的任何函數,或將其作爲類屬性存儲。如果你把你的連接放在你的'getDetails'函數中,它將不能在腳本的其他地方重用。 – Mike

+0

逐行瀏覽你的'dbConn.php'文件,我認爲這個錯誤非常明顯。來吧,你甚至都不會在這裏嘗試。 – Mike

回答

1

這是發生,因爲$db並不實際持有的PDO連接對象。您已將dbConn.php腳本本身(在成功包含時返回1)轉換爲$db,這就是您接收有問題的整數錯誤的原因。

dbConn.php文件看起來應該像下面的(請加dbConn.php到你原來的職位進行驗證):

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

然後在您的functions.php腳本:

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; 
} 

你只需要求dbConn.php而不是將其分配給任何變量。

0

由於您的錯誤消息指出

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

我認爲錯誤在你getDetails功能,你叫"sql = $db->prepare ..."

因此錯誤是從$ DB正在添加變量彈出。發佈您的「dbConn.php」文件以獲取更多詳細信息。

相關問題