Я пытаюсь запросить мою базу данных, используя Sphinx Search, используя MySQLi.
То, что я пытаюсь достичь, заключается в том, что пользователь вводит термин, который затем используется для запроса моей базы данных и возвращает значения. Однако я получаю ошибку:
"Вызовите функцию-член fetch_assoc() для не-объекта"
$conn = new mysqli('127.0.0.1', 'null', 'null', 'null', 9306);
if ($conn->connect_error) {
throw new Exception('Connection Error: ['.$conn->connect_errno.'] '.$conn->connect_error, $conn->connect_errno);
}
$term = $_GET['q'];
echo "$term";
$resource = $conn->query('SELECT * FROM test1 WHERE MATCH (title, description) AGAINST ($term)');
$results = array();
while ($row = $resource->fetch_assoc()) {
$results[] = $row;
}
$resource->free_result();
var_dump($results);
Оскорбительная строка выглядит следующим образом:
$resource = $conn->query('SELECT * FROM test1 WHERE MATCH (title, description) AGAINST ($term)');
Если я изменил строку на:
$resource = $conn->query('SELECT * FROM test1')
Запрос выполняется нормально, однако мне нужен запрос для соответствия $ term, но у меня возникают проблемы, и я не понимаю, почему.
Вы не цитируете материал, который вы вкладываете в свой запрос.
И даже если бы вы были, это могло бы не сработать. Или это может просто удалить весь набор данных! Если вы вводите введенные пользователем данные в базу данных, вы должны быть осторожны. Используйте подготовленный запрос; если вы хотите мой совет, сбросьте API mysqli и перейдите на более высокий уровень, например PDO.
$conn = new mysqli('127.0.0.1', 'null', 'null', 'null', 9306);
if ($conn->connect_error) {
throw new Exception('Connection Error: ['.$conn->connect_errno.'] '.$conn->connect_error, $conn->connect_errno);
}
$term = $_GET['q'];
echo "$term";
$statement = $conn->prepare('SELECT * FROM test1 WHERE MATCH (title, description) AGAINST (?)');
$statement->bind_param("s", $term);
$statement->execute();
$result = $statement->get_result();
while ($row = $result->fetch_array(MYSQLI_NUM)) {
$results[] = $row;
}
var_dump($results);
prepare()
. Правильно ли инициализируется подключение к вашей базе данных? Должна быть проверка ошибок на каждом этапе пути; Я просто взял твой код и немного его изменил. Я не mysqli_*
использовании mysqli_*
функций напрямую.
$resource = $conn->query('SELECT * FROM test1 WHERE MATCH (title, description) AGAINST ($term)');
Это запрос MySQL. То, что MySQL использует для выполнения полнотекстового запроса.
Вы подключаетесь к Sphinx (порт 9306 отдает его), поэтому должен быть запущен SphinxQL.
Поиск синтаксиса SphinxQL SELECT
... http://sphinxsearch.com/docs/current.html#sphinxql-select