Я воскрешал старый проект для новых целей, и запуск его на новых версиях PHP привел к этой ошибке:
Устаревший: нестатический метод База данных ::connect () не должен вызываться статически, предполагая $ this из несовместимого контекста в / home / user / public_html / app / models / mainmodel.php on line 108
Итак, я нашел старый код, похожий на этот
$db = Database::connect();
$db->query("INSERT INTO users (userId) values ('1')");
, и превратил их в
$db = new Database();
$db->connect();
$db->query("INSERT INTO users (userId) values ('1')");
После этого изменения он прекрасно работал сисключение из следующего
function save(){
$db = Database::connect();
if($this->id == 0){
//Insert New
$db->query("INSERT INTO `entities` (`active`) VALUES ('1')");
$this->id = $db->last();
}else{
$db->query("UPDATE entities SET
active = '" . $this->active . "',
modified = now()
WHERE id = '" . $this->id . "';");
}
return $this->id;
}
, которое, когда я изменяю, приводит к этому
function save(){
$db = new Database();
$db->connect();
if($this->id == 0){
//Insert New
$db->query("INSERT INTO `entities` (`active`) VALUES ('1')");
$this->id = $db->last();
}else{
$db->query("UPDATE entities SET
active = '" . $this->active . "',
modified = now()
WHERE id = '" . $this->id . "';");
}
return $this->id;
}
Однако теперь эта строка больше не работает
$this->id = $db->last();
var_dump of $ this-> id показывает, что ему присваивается значение int (0), чего не происходит, когда я использую Database :: connect () и вставляется запись
В качестве теста я вставил в свой код следующеепроверить
function save(){
$dbconn = new mysqli ($mysql_host, $mysql_username, $mysql_password, $mysql_database);
if($dbconn->connect_error){
die('Connection Error (' . $dbconn->connect_errono . ') ' . $dbconn->connect_error);
}
if($this->id == 0){
//Insert New
$dbconn->query("INSERT INTO `entities` (`active`) VALUES ('1')");
$this->id = $dbconn->last();
}else{
$dbconn->query("UPDATE entities SET
active = '" . $this->active . "',
modified = now()
WHERE id = '" . $this->id . "';");
}
return $this->id;
}
Это сработало и не вернуло int (0).
ДляСсылка, вот мой класс базы данных:
class Database extends mysqli {
private static $db;
public $results;
public function __construct() {
if(parent::__construct(DB_HOST, DB_USER, DB_PASS, DB_NAME, NULL, NULL)) {
return $this;
} else {
return false;
}
}
public function connect($host = DB_HOST, $user = DB_USER, $pass = DB_PASS, $db = DB_NAME, $port = NULL, $socket = NULL) {
if (!isset(self::$db)) {
self::$db = new Database;
}
return self::$db;
}
public function query($str) {
$this->results = mysqli_query(self::$db, $str);
if($this->results===false) {
echo $this->mysqli_error();
}
else
return $this->results;
}
function last() {
return $this->insert_id;
}
final private function __clone() {}
}
Наконец версии PHP и MySQL:
PHP Version: 5.6.40
MySQL Version: 5.6.43
Боюсь, что проблема существует в моем расширении класса базы данных, но не могу точно увидеть проблему,может кто-нибудь помочь?