我收到上面显示的错误。我看过这个网站,但我找不到合适的方法来解决我的问题。
我正在尝试编写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();
已加载。
答案 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