簡體   English   中英

致命錯誤:在非對象中調用成員函數bindValue()

[英]Fatal error: Call to a member function bindValue() on a non-object in

我收到上面顯示的錯誤。 我已經看過這個網站,但是找不到解決我問題的正確方法。

我試圖寫一個User- class 到目前為止,以下代碼是我的代碼。

class User
{

    private $_id;

    public function __construct($id)
    {
        $this->_id = $id;
    }

    public function getUsername()
    {
        global $db;

        $query = $db->prepare("SELECT * FROM users WHERE id = ?");
        $query->bindValue(1, $this->_id);

        $query->execute();

    }

}

結果是出現以下錯誤,我不知道該如何解決...

致命錯誤:在非對象中調用成員函數bindValue()

編輯:

這是我的使用方式:

$user = new User($_SESSION['logged_in']); 
$username = $user->getUsername();

旁注: session_start(); 已加載。

使用全局變量確實是一種糟糕的方法。

閱讀此博客文章:

全局變量不好

它解釋了為什么它不是一個好主意。

如果$db為null,則很可能prepare將不會返回語句對象。

然后$query將不是一個statemnt,因此bindValue不會被識別。

而是將連接傳遞給您的班級,然后停止使用全局變量。

而且您的函數沒有返回任何數據,我對其進行了修改以返回用戶名。

class User
{

    private $_id;
    private $db;

    public function __construct($id, $conn)
    {
        $this->_id = $id;
        $this->$db = $conn;
    }

    public function getUsername()
    {
        $query = $this->db->prepare("SELECT username FROM users WHERE id = ?");
        $query->bindValue(1, $this->_id);

        $query->execute();
        $data = $query->fetch();

        return $data['username'];

    }

}

用法:

session_start();
$id = $_SESSION['logged_in'];
$conn = new PDO('xxx');
$user = new User($id, $conn); 
$username = $user->getUsername();

在我看來,您的查詢對象是$db而不是$query ...如果是這樣,則$ query缺少bindValue()是正常的,因為它不是對象,因此它沒有任何方法。

嘗試使用$db->bindValue() ,讓我們知道它如何進行:D

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM