尝试使用 Mysqli 插入时,我得到“不在对象上下文中使用 $this”
Posted
技术标签:
【中文标题】尝试使用 Mysqli 插入时,我得到“不在对象上下文中使用 $this”【英文标题】:Trying to insert with Mysqli I'm getting "Using $this when not in object context in" 【发布时间】:2017-09-11 07:37:10 【问题描述】:我正在尝试将值插入到我的数据库中,但我收到了this error。
<?php
class Database
private $host;
private $user;
private $pass;
private $db;
public $mysqli;
//Creo el constructor y llamo a db_connect, el constructor por regla se ejecutara primero
// y la dejo publica
public function __construct()
$this->db_connect();
$this->passData();
// db_connect asigno los datos para la conexion
private function db_connect()
$this->host = 'localhost';
$this->user = 'root';
$this->pass = 'mysqladmin';
$this->db = 'mnote';
//Paso los datos al controlador de mysqli
$this->mysqli = new mysqli($this->host, $this->user, $this->pass, $this->db);
return $this->mysqli;
public function passData()
$this->name=$_POST['name'];
$this->lname=$_POST['lname'];
$this->email=$_POST['email'];
$this->password=$_POST['password'];
$this->bdate=$_POST['bdate'];
// paso la conexion y le asigno el query
public function putData($sql)
$result = $this->mysqli->query($sql);
return $result;
$db = new Database();
$db->putData("INSERT INTO 'users'('name', 'lname', 'email', 'pass', 'bdate') VALUES (['$this->name'],['$this->lname'],['$this->email'],['$this->password'],['$this->bdate'])");
【问题讨论】:
第 50 行是哪一行?$this
指的是当前对象 (php.net/manual/en/language.oop5.basic.php) - 当您运行查询时它会失败,因为错误表明它没有引用任何对象。尝试预先将要插入的值存储在它们自己的变量中,然后在查询中使用它。同时转义你的论点或使用准备好的语句来避免 SQL 注入 - en.wikipedia.org/wiki/SQL_injection
【参考方案1】:
您的代码:
$db->putData("INSERT INTO 'users'('name', 'lname', 'email', 'pass', 'bdate')
VALUES (['$this->name'],['$this->lname'],['$this->email'],
['$this->password'],['$this->bdate'])");
不正确,因为 PHP 不可能知道 $this->name
指的是哪个值,$this->lname
指的是哪个值等等。
$this
指的是实际对象,因此$this
必须位于类的内部。
一个澄清的例子:
class nameHandler
private $name = "George";
public function getName()
return $this->name; //Returns value George
$nh = newHandler();
echo $nh->getName(); //Echos out George
//Error. Using $this when not in object context ($this is not an object, but
//$nh is because object $nh is created from the nameHandler class)
echo $this->getName();
注意:还要查看上面 cmets 中提到的准备好的语句。
【讨论】:
以上是关于尝试使用 Mysqli 插入时,我得到“不在对象上下文中使用 $this”的主要内容,如果未能解决你的问题,请参考以下文章
mysqli_query():在PHPUnit中测试PHP函数时无法获取mysqli