![](/img/trans.png)
[英]Error in PDO page Call to a member function bindValue() on a non-object
[英]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.