написал вот такой код для работы с БД:
class CConnectionSingleton
{
private static $_instance = null;
private static $_db_address = 'xxx';
private static $_db_logon = 'xxx';
private static $_db_password = 'xxx';
private static $_db_goods_db = 'xxx';
private $_connection = null;
public static function getInstance()
{
if (self::$_instance != null) {
return self::$_instance;
}
return new self;
}
private function __construct () {
$_connection = new mysqli($_db_address , $_db_logon, $_db_password, $_db_goods_db);
}
private function __clone () {}
private function __wakeup () {}
// закрыть соединение
public function closeConnection()
{
$_connection->close();
}
// получить данные по запросу в БД
public function sql2data($query)
{
// выполнить запрос в БД
$result = $_connection->query($query);
// сформировать результат
$data = $result->fetch_all(MYSQLI_ASSOC);
// очистить память после выполнения sql запроса
do{} while($_connection->more_results() && $_connection->next_result());
// сформировать json строку по результату
return $data;
}
// перевести результат sql запроса в json
public function sql2json($query)
{
// сформировать json строку по результату
return json_encode($this->sql2data($query));
}
// выполнить запрос в БД
public function sql2simple($query)
{
// выполнить запрос в БД
$result = $_connection->query($query);
}
}
Вызываю следующим образом:
<html>
<head>
<meta charset="UTF-8" />
</head>
<body>
<?php
include ('test.php');
// установить соединение
$connection = CConnectionSingleton::getInstance();
$queryData = $connection->sql2json("SELECT * FROM table;");
?>
<script>
var data = <?php echo json_encode($queryData, JSON_NUMERIC_CHECK) ?>;
console.log(JSON.parse(data));
</script>
</body>
</html>
PHP ругается на
Fatal error: Call to a member function query() on a non-object in test.php on line 42
line 42 - это
$result = $_connection->query($query);
В чем может быть проблема?
Что-то туплю, ошибка то элементарная
P.S.
Ещё не понятно, если меняю
return json_encode($this->sql2data($query));
на
return json_encode(sql2data($query));
ловлю на этой строчке ошибку
Fatal error: Call to undefined function sql2data() in test.php on line 58
Вроде же из метода класса обратился к тому же методу, зачем явно указывать это
Нашёл одну ошибку - соединение не устанавливалось, Исправил код:
$_connection = new mysqli(self::$_db_address, self::$_db_logon, self::$_db_password, self::$_db_goods_db);
основную ошибку это не исправило, но теперь устанавливается соединение
проверил внутри функции sql2data
- там переменная _connection уже не определена :(
P.S.
ВСЁ, НАШЕЛ И ИСПРАВИЛ ОШИБКУ
Надо было обращаться к $_connection
через $this
например,
$this->_connection = new mysqli(self::$_db_address, self::$_db_logon, self::$_db_password, self::$_db_goods_db);
или
$result = $this->_connection->query($query);
Дело в том, что в php нет сокращенного синтаксиса обращения к полям объекта/класса.
Т.е. $this->
/self::
нельзя опустить, они обязательны.
В случае их отсутствия, всегда подразумевается обычная локальная переменная.
Итак, $this->_connection = new mysqli...
, $this->_connection->close()
и т.д.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть таблица tb_user со столбцами user_id и usernameВ массиве $usernames[] храниться username некоторых пользователей
У меня есть вопрос по введению данных в json файлВообщем, мне нужно, что бы json файл хранил в себе часть кода, ид видеозаписи, ид пользователя,...