Я получаю эту ошибку:
Вызов функции-функции-члена () для не-объекта.
- Неустранимая ошибка: неопределенная константа класса
- PHP mysqli - возвращает ассоциативный массив из подготовленного оператора
- Почему мой php-код не подключается к моей удаленной базе данных MySql?
- Получение одной строки только с MySQLi
- mysqli_num_rows () ожидает, что параметр 1 будет mysqli_result, boolean означает, что и как его можно исправить?
Также, когда я использую другие функции MySQLi, он дает мне ту же ошибку, но для этой функции.
Мое connection.php
:
<?php $mysqli = new mysqli("localhost","user","pass","db"); if(mysqli_connect_errno()){ trigger_error('Connection failed: '.$mysqli->error); } ?>
Моя функция:
function form_year($find, $value, $from, $vehicletype){ //Query setup $autoquery = "SELECT Year, Vehicle, Brand, Model, Type, FROM vehicle_tbl WHERE Vehicle = '".$vehicletype."' GROUP BY Year"; $autoresult = $mysqli->query($autoquery); $search = array("%value%", "%options%"); $rows = file_get_contents("tpl/options.html"); while($row = $autoresult->fetch_assoc()){ $replace = array($row[$value], $row[$value]); $tr .= str_replace($search, $replace, $rows); } return str_replace($find, $tr, $from); }
Функция и соединение включены, когда функция вызывается
Быстрое / грязное исправление:
function form_year($find, $value, $from, $vehicletype){ //Query setup global $mysqli; $autoquery = "SELECT [...]
Ваш объект $mysqli
находится в глобальной области действия, а не в пределах функции. Вы должны передать объект mysqli
в функцию как параметр, чтобы у вас был доступ к нему. Так что-то вроде этого:
function form_year($find, $value, $from, $vehicletype, $db){ ... $autoresult = $db->query($autoquery); ... }
Заметьте, что я также добавил бы некоторую проверку в функции, чтобы убедиться, что был отправлен правильный объект mysqli, но это не показано.
Вы можете попытаться удалить запятую после Type
поскольку это может быть синтаксическая ошибка для строки MySQL. Также попробуйте выполнить echo $mysqli->error
и посмотреть, что она говорит.
Вы должны убедиться, что ваш $ mysqli доступен в области видимости (что не относится к вашей функции). Доступно несколько решений: глобальные, передающие аргументы, singleton. Personnaly Я обычно делаю singleton для подключения к базе данных, что-то вроде этого:
class DB { private static $_instance; public static function get() { if(!isset(self::$_instance)) { self::$_instance = new mysqli("localhost","user","pass","db"); if(mysqli_connect_errno()) { trigger_error('Connection failed: '.self::$_instance->error); } } return self::$_instance; } } //Calling $autoresult = DB::get()->query($autoquery);