致命错误:在非对象中调用成员函数bindValue()

时间:2014-10-23 15:39:17

标签: php pdo bindvalue

我收到上面显示的错误。我看过这个网站,但我找不到合适的方法来解决我的问题。

我正在尝试编写User- 。到目前为止,以下代码是我的代码。

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();已加载。

2 个答案:

答案 0 :(得分:2)

使用全局变量实际上是一种糟糕的方法。

阅读此博客文章:

<强> Global Variables Are Bad

它解释了为什么它不是一个好主意。

如果$db为空,则很可能prepare不会返回语句对象。

然后$query将不会成为状态,因此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();

答案 1 :(得分:-1)

我联系到你的查询对象是$db而不是$query ...如果是这样,那么$ query缺少bindValue()是正常的,因为它不是一个对象,因此它没有任何方法。

尝试使用$db->bindValue(),让我们知道它是怎么回事:D