Php 致命错误:对中的非对象调用成员函数bindValue()
我得到了上面显示的错误。我已经浏览了这个网站,但是我找不到解决问题的正确方法 我正在尝试编写一个用户类。以下代码是到目前为止我的代码Php 致命错误:对中的非对象调用成员函数bindValue(),php,pdo,bindvalue,Php,Pdo,Bindvalue,我得到了上面显示的错误。我已经浏览了这个网站,但是我找不到解决问题的正确方法 我正在尝试编写一个用户类。以下代码是到目前为止我的代码 class User { private $_id; public function __construct($id) { $this->_id = $id; } public function getUsername() { global $db; $q
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()
编辑:
session_start();
$id = $_SESSION['logged_in'];
$conn = new PDO('xxx');
$user = new User($id, $conn);
$username = $user->getUsername();
以下是我如何使用它:
$user = new User($_SESSION['logged_in']);
$username = $user->getUsername();
旁注:
session_start()
已加载。我认为您的查询对象是$db
而不是$query
。。。如果是这样,那么$query缺少bindValue()
,这是正常的,因为它不是一个对象,因此没有任何方法
试着使用
$db->bindValue()
并让我们知道它是如何运行的:D使用全局变量确实是一种糟糕的方法
阅读以下博客:
这解释了为什么这不是一个好主意
如果$db
为空,则prepare很可能不会返回语句对象
然后,$query
将不是statemnt,因此,bindValue
将无法识别
相反,将连接传递给您的类,并停止使用globals
而且你的函数没有返回任何数据,我修改它以返回用户名
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();
您是如何使用此功能的?$user=新用户($\u会话['logged\u in'])$username=$user->getUsername();哦,又一个可爱的
global$db
.Issession_start()代码>加载?是的,它是@Fred-ii-我在上面定义$query。好的,然后。。。我错过了,抱歉:D var_在bindValue()之前转储$query以检查它是否是一个对象。如果没有,则没有创建db对象。谢谢您的回答。它帮助了我。