powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Ошибка при попытке сделать запрос к базе через MySQLi
13 сообщений из 13, страница 1 из 1
Ошибка при попытке сделать запрос к базе через MySQLi
    #38113134
boichukvd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
У меня такая вот ошибка выскакивает:
Код: php
1.
Fatal error: Using $this when not in object context in


А здесь строка c ошибкой:
Код: php
1.
2.
3.
    public function query($query, $params = false){
            return $this->query_mysqli($query, $params);
    }


Запрос такой:
Код: php
1.
$result= DB::query("SELECT `first_name` FROM `user`");


Здесь наверное второй параметр у запросе указать нужно, но увы из за статуса новичок, не знаю какой

Вот собственно весь код:
1. index.php
require './blocks/db.php'; /*Соединяемся с базой*/

DB::getInstance(array('host'=>'localhost','login'=>'veshalka','password'=>'','db'=>'veshalka.com', 'type'=>'mysqli'));

$result= DB::query("SELECT `first_name` FROM `user`");
echo '<h2>Таблица продуктов:</h2> <table border="1">';
while($obj=DB::fetch_object($result)){
echo '<tr><td>'.$obj->first_name.'</td><td>'.'</td><tr>';
}
echo '</table>';

2. класс для работы с базой - db.php
/**
* DB
*
* @uses $db = DB::getInstance();
* First use: $db = DB::getInstance(array('host'=>'localhost','login'=>'','password'=>'','db'=>'', 'type'=>'mysqli'));
*/
class DB{

/**
* Module Instance for Singleton pattern
*
* @var DB
*/
static private $instance = null;

/**
* Singleton main method
*
* @param array $params
* @return DB
*/
static function getInstance($params = false){
if (self::$instance == null){
self::$instance = new DB($params);
}
return self::$instance;
}

private function __clone() {
}

private function __wakeup() {
}

/**
* Mysqli connection handler
*
* @var mysqli
*/
public $handler = null;

/**
* Mysqli statement handler
*
* @var mysqli_stmt
*/
protected $stmt = null;

/**
* Mysql result handler
*
* @var resource
*/
protected $result = null;

/**
* Stmt result keys
*
* @var arrays
*/
protected $keys = array();
/**
* Stmt metadata
*
* @var mysqli_metadata
*/

/**
* Database connect type
*
* @var string
*/
protected $meta = null;

/**
* Module constructor
*
* @param array $params
*/
public function __construct($params = false){
$this->connect_mysqli($params);
$this->type = $params['type'];
if (array_key_exists('encoding',$params)) $this->query("set names ".$params['encoding']); else $this->query("set names UTF8");
}

/**
* Connect to database - mysqli method
*
* @param array $params
*/
public function connect_mysqli($params){
if (!$params) throw new Exception('Params error');
if (!$this->handler = new mysqli($params['host'],$params['login'],$params['password'],$params['db'])) throw new Exception(mysqli_error());
}


/**
* Send query
*
* @param string $query
* @param mixed(string,array) $params
*/
public function query($query, $params = false){
return $this->query_mysqli($query, $params);
}

/**
* Send query - mysqli
*
* @param string $query
* @param mixed(string,array) $params
*/
public function query_mysqli($query, $params = false){
$this->stmt = $this->handler->prepare($query);
if (!$this->stmt){
throw new Exception(mysqli_error($this->handler)."\n\n".$query);
}
if ($params){
if (!is_array($params)) $params = array($params);
array_unshift($params, str_repeat('s', count($params)));
$refs = array();
foreach ($params as $i => &$f) $refs[$i] = &$f;
call_user_func_array(array(&$this->stmt, 'bind_param'),$refs);
}
$this->stmt->execute();
$this->stmt->close();
return true;
}

/**
* Execute query
*
* @param string $query
* @param mixed(string,array) $params
*/
public function _execute($query,$params = false){
$this->stmt = $this->handler->prepare($query);
if (!$this->stmt){
throw new Exception(mysqli_error($this->handler)."\n\n".$query);
}
if ($params){
if (!is_array($params)) $params = array($params);
array_unshift($params, str_repeat('s', count($params)));
$refs = array();
foreach ($params as $i => &$f) $refs[$i] = &$f;
call_user_func_array(array(&$this->stmt, 'bind_param'),$refs);
}
$this->stmt->execute();

$this->meta = $this->stmt->result_metadata();
$this->keys = array();
foreach ($this->meta->fetch_fields() as $col) $this->keys[] = $col->name;
$this->stmt->store_result();
}

/**
* Fetch results
*
* @return array
*/
public function fetch(){
$values = array_fill(0, count($this->keys), null);
$refs = array();
foreach ($values as $i => &$f) $refs[$i] = &$f;

call_user_func_array(array(&$this->stmt, 'bind_result'),$refs);
$retval = $this->stmt->fetch();
if (!$retval){
$this->stmt->reset();
return $retval;
}
return array_combine($this->keys, $refs);
}

/**
* Fetch all results
*
* @param string $query
* @param mixed(string,array) $params
* @return array
*/
public function fetchAll($query,$params = false){
$this->_execute($query,$params);

$data = array();
while ($row = $this->fetch()){
$data[] = $row;
}
return $data;
}

/**
* Fetch one column
*
* @param string $query
* @param mixed(string,array) $params
* @return string
*/
public function fetchOne($query, $params = false){
if ($this->type == 'mysqli') {
$this->_execute($query,$params);

$this->stmt->bind_result($result);
$this->stmt->fetch();
$this->stmt->reset();
return $result;
}
if ($this->type == 'mysql') {
if ($this->query($query, $params))
$ret = mysql_fetch_row($this->result);
else
throw new Exception('Error fetching data');
return $ret[0];
}
}

/**
* Result num rows
*
* @return integer
*/
public function num_rows(){
return $this->stmt->num_rows();
}

/**
* Last inserted id
*
* @return integer
*/
public function lastInsertId(){
return $this->handler->insert_id;
}
}
...
Рейтинг: 0 / 0
Ошибка при попытке сделать запрос к базе через MySQLi
    #38113141
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boichukvd,

Мускуль тут никаким боком. Внимательно прочтите сообщение об ошибке. Все дело в том, что при вызове вида DB::query объект (тот самый, котоый $this) не создается. Соответственно, тут могут быть несколько вариантов. Можно создать объект и использовать его методы. Можно вызывать как есть, но не использовать $this. Код под спойлером не смотрел, не могу сказать, какой из вариантов подойдет лучше.
...
Рейтинг: 0 / 0
Ошибка при попытке сделать запрос к базе через MySQLi
    #38113158
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boichukvd,

Прочитайте хотя бы начальный комментарий в db.php, там же все написано.
...
Рейтинг: 0 / 0
Ошибка при попытке сделать запрос к базе через MySQLi
    #38113161
boichukvd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft, ну да там пишет сначала вызвать DB::getInstance() , в index.php я уже это сделал:
Код: php
1.
DB::getInstance(array('host'=>'localhost','login'=>'veshalka','password'=>'','db'=>'veshalka.com', 'type'=>'mysqli'));
...
Рейтинг: 0 / 0
Ошибка при попытке сделать запрос к базе через MySQLi
    #38113163
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boichukvd,

вглядитесь в эту строчку повнимательней.
...
Рейтинг: 0 / 0
Ошибка при попытке сделать запрос к базе через MySQLi
    #38113164
boichukvd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft, думаю надо как-то заставить использовать getInstance
в строке
Код: php
1.
return $this->query_mysqli($query, $params);
...
Рейтинг: 0 / 0
Ошибка при попытке сделать запрос к базе через MySQLi
    #38113171
boichukvd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Надеюсь заказанная книга Мэтта Зандстра которая еще не пришла в будущем мне поможет))
...
Рейтинг: 0 / 0
Ошибка при попытке сделать запрос к базе через MySQLi
    #38113190
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на хабре в таких случаях пишут facepalm.jpg
...
Рейтинг: 0 / 0
Ошибка при попытке сделать запрос к базе через MySQLi
    #38113204
boichukvd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft, понимаю) ну так все с такого начинают
...
Рейтинг: 0 / 0
Ошибка при попытке сделать запрос к базе через MySQLi
    #38113337
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: php
1.
2.
$db = DB::getInstance(array('host'=>'localhost','login'=>'','password'=>'','db'=>'', 'type'=>'mysqli'));
$db->query('...');
...
Рейтинг: 0 / 0
Ошибка при попытке сделать запрос к базе через MySQLi
    #38113803
boichukvd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hett, Спасибо, наверное я правильно понял, что я инициализировал экземпляра класса, т.е. соединение которое хранится в $db, а потом его использую
Код: php
1.
$db->query('...');
...
Рейтинг: 0 / 0
Ошибка при попытке сделать запрос к базе через MySQLi
    #38113908
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если честно, я последнего вопроса не понял)
...
Рейтинг: 0 / 0
Ошибка при попытке сделать запрос к базе через MySQLi
    #38114007
boichukvd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hett, ну и ничего страшного
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Ошибка при попытке сделать запрос к базе через MySQLi
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]