我有这个类用于使用 php/mysqli 连接到 mysql 数据库:
class AuthDB {私人 $_db;公共函数 __construct() {$this->_db = new mysqli(DB_SERVER, DB_USER, DB_PASS, DB_NAME)or die("连接数据库有问题.错误:".mysqli_error());}公共函数 __destruct() {$this->_db->close();未设置($this->_db);}}现在,我有列表用户的任何页面:
require_once 'classes/AuthDB.class.php';session_start();$this->_db = new AuthDB();//这条线的错误$query = "SELECT Id, user_salt, password, is_active, is_verified FROM Users where email = ?";$stmt = $this->_db->prepare($query);//绑定参数$stmt->bind_param("s", $email);//执行语句如果 ($stmt->execute()) {//绑定结果列$stmt->bind_result($id, $salt, $pass, $active, $ver);//获取第一行结果$stmt->fetch();回声 $id;}现在,我看到这个错误:
致命错误:第 6 行中不在对象上下文中时使用 $this如何修复这个错误?!
就像错误所说的那样,您不能在类定义之外使用 $this.要在类定义之外使用 $_db,首先将其设为 public 而不是 private:
public $_db
然后,使用此代码:
$authDb = new AuthDb();$authDb->_db->prepare($query);//其余代码相同--
您必须了解 $this 的实际含义.在类定义中使用时,$this 用于引用该类的对象.因此,如果您在 AuthDB 中有一个函数 foo,并且您需要从 foo 内访问 $_db,您将使用 $this 告诉 PHP 您想要 $_db 来自 foo 所属的同一对象.
您可能想阅读这个 StackOverflow 问题:PHP:self vs $this>
i have this class for connect to mysql database using php/mysqli:
class AuthDB {
private $_db;
public function __construct() {
$this->_db = new mysqli(DB_SERVER, DB_USER, DB_PASS, DB_NAME)
or die("Problem connect to db. Error: ". mysqli_error());
}
public function __destruct() {
$this->_db->close();
unset($this->_db);
}
}
now, i have any page for list user :
require_once 'classes/AuthDB.class.php';
session_start();
$this->_db = new AuthDB(); // error For This LINE
$query = "SELECT Id, user_salt, password, is_active, is_verified FROM Users where email = ?";
$stmt = $this->_db->prepare($query);
//bind parameters
$stmt->bind_param("s", $email);
//execute statements
if ($stmt->execute()) {
//bind result columnts
$stmt->bind_result($id, $salt, $pass, $active, $ver);
//fetch first row of results
$stmt->fetch();
echo $id;
}
now, i see this error:
Fatal error: Using $this when not in object context in LINE 6
How to fix this error?!
Like the error says, you can't use $this outside of the class definition. To use $_db outside the class definition, first make it public instead of private:
public $_db
Then, use this code:
$authDb = new AuthDb();
$authDb->_db->prepare($query); // rest of code is the same
--
You have to understand what $this actually means. When used inside a class definition, $this is used to refer to an object of that class. So if you had a function foo inside AuthDB, and you needed to access $_db from within foo, you would use $this to tell PHP that you want the $_db from the same object that foo belongs to.
You might want to read this StackOverflow question: PHP: self vs $this
这篇关于致命错误:不在对象上下文中时使用 $this的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!
mysql 中的 store_result() 和 get_result() 返回 falsestore_result() and get_result() in mysql returns false(mysql 中的 store_result() 和 get_result() 返回 false)
调用未定义的函数 mysqli_result::num_rows()Call to undefined function mysqli_result::num_rows()(调用未定义的函数 mysqli_result::num_rows())
PHP 准备好的语句问题PHP Prepared Statement Problems(PHP 准备好的语句问题)
mysqli_fetch_array 只返回一个结果mysqli_fetch_array returning only one result(mysqli_fetch_array 只返回一个结果)
PHP MySQLi 多次插入PHP MySQLi Multiple Inserts(PHP MySQLi 多次插入)
如何确保 MySQL 中的值在 PHP 中保持其类型?How do I make sure that values from MySQL keep their type in PHP?(如何确保 MySQL 中的值在 PHP 中保持其类型?)