【问题标题】:Fatal error: Call to a member function bindValue() on a non-object in致命错误:在非对象上调用成员函数 bindValue()
【发布时间】:2014-12-19 08:16:51
【问题描述】:

我得到了上面显示的错误。我查看了这个网站,但我找不到解决我问题的正确方法。

我正在尝试编写一个 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(); 已加载。

【问题讨论】:

  • 你是怎么用这个的?
  • $user = new User($_SESSION['logged_in']); $username = $user->getUsername();
  • 哦,又是一个可爱的global $db;
  • session_start(); 加载了吗?
  • 是的,是@Fred-ii-

标签: php pdo bindvalue


【解决方案1】:

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

尝试使用$db->bindValue() 并告诉我们进展如何:D

【讨论】:

  • 我在上面定义了$query。
  • 好的,然后...我错过了,抱歉 :D var_dump $query 在 bindValue() 之前检查它是否是一个对象。如果没有,则没有创建 db 对象。
【解决方案2】:

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

阅读这篇博文:

Global Variables Are Bad

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

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

那么$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();

【讨论】:

  • 感谢您的回答。它帮助了我。
猜你喜欢
  • 1970-01-01
  • 2013-11-25
  • 2012-05-30
  • 2016-08-30
  • 2015-02-06
  • 2012-05-14
  • 2013-11-19
  • 2017-04-30
  • 2015-04-13
相关资源
最近更新 更多