@Zafar

Undefined property из-за чего?

Выдаёт ошибки, как решить?

Notice: Undefined property: Functions::$db in F:\home\test1.ru\www\engine\functions.php on line 6
Fatal error: Call to a member function escape() on a non-object in F:\home\test1.ru\www\engine\functions.php on line 6

functions.php line 6

echo $this->db->escape($login);

index.php
require_once("engine/DB.php");
$db = new DB("", "", "", "");

require_once("engine/functions.php");
$func = new Functions();

$func->auth("login", "pass");


db.php
class DB
{
	private $link;
	
	public function __construct($hostname, $username, $password, $database, $port = 3306)
	{
		$this->link = new mysqli($hostname, $username, $password, $database, $port);
		
		if($this->link->connect_error)
		{
	  		exit("Ошибка: Не удалось соединиться с сервером базы данных!");
		}
		
		$this->link->query("SET NAMES 'utf8'");
		$this->link->query("SET CHARACTER SET utf8");
		$this->link->query("SET CHARACTER_SET_CONNECTION=utf8");
		$this->link->query("SET SQL_MODE = ''");
  	}
	
  	public function query($sql)
	{
		if(!$resource = $this->link->query($sql))
		{
			exit("Error: " . $this->link->error . " (#" . $this->link->errno . ")" . "<br>" . $sql);
		}
		
		if(is_object($resource))
		{
			$i = 0;
			$data = array();
			
			while($row = $resource->fetch_assoc())
			{
				$data[$i] = $row;
				$i++;
			}
			
			$resource->free();
			
			$query = new stdClass();
			$query->row = isset($data[0]) ? $data[0] : array();
			$query->rows = $data;
			$query->num_rows = $i;
			
			unset($data);
			return $query;
		}
  	}
	
	public function escape($value)
	{
		return $this->link->real_escape_string($value);
	}
	
  	public function getLastId()
	{
		return $this->link->insert_id;
  	}
	
	public function __destruct()
	{
		return $this->link->close();
	}
}
  • Вопрос задан
  • 3246 просмотров
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Класс просто ужасный.
Бессмысленный и беспощадный.
Фактически, голый mysqli будет работать даже лучше, чем эта поделка.

Настоятельно рекомендую вместо написания этого велосипеда начать с использования PDO, пере давая данные в запрос не напрямую, а только через плейсхолдеры.
И только немного освоившись с тем, как работают подобные классы и с подготовленными выражениями, начинать пилить что-то своё.

На будущее. Вместо вот этого ужаса
$this->link->query("SET NAMES 'utf8'");
    $this->link->query("SET CHARACTER SET utf8");
    $this->link->query("SET CHARACTER_SET_CONNECTION=utf8");
    $this->link->query("SET SQL_MODE = ''");

писать
$this->link->set_charset('utf8');
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@IceJOKER
Web/Android developer
у $this нет свойства db и соответственно Fatal error на вызов метода несуществующего свойства(объекта)
Ответ написан
iit
@iit
TeamLead + php/js разработчик
1) Undefined property: Functions::$db - У класса Functions нет свойства $db - могу предположить что код загружающий туда базу данных либо не описан либо не работает.

2) Fatal error: Call to a member function escape() on a non-object
Так как объект $db не создан то и вызвать его функцию тоже не получится.

Решение - посмотреть класс базы и привязать его к вашему объекту.

что-то вроде

$this->db = new SomeDataBaseClass('mysql','user','password');
echo $this->db->escape($login);


Нужно только найти как у вас называется SomeDataBaseClass и как его создавать.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы