Одна из самых важных задач стоящих при разработке сайта, это реализация полнотекстового поиска. Один из популярных и простых вариантов реализации, это использование Sphinx. На хабре уже есть посвящённые ему статьи, но не заслуженно не упомянута библиотека Query Builder. Это я и постараюсь исправить.
Введение
Одна из самых важных задач стоящих при разработке сайта, это реализация полнотекстового поиска. Один из популярных и простых вариантов реализации, это использование Sphinx. На хабре уже есть посвящённые ему статьи, но не заслуженно не упомянута библиотека Query Builder. Это я и постараюсь исправить.
Данный текст является вольным переводом статьи «SphinxQL Query Builder for PHP».
Почему его стоит использовать?
- Минимизируем риски от возможных sql инъекции против ваших индексов;
- Делает ваши запросы более читабельными и легче поддерживаемыми;
- Позволяет создавать более простые и гибкие запросы;
- Он имеет все функции реализованные в билиотеке Sphinx API и большинство функций используемых при работе с SphinxQL;
- Он был протестирован в нескольких версиях SphinxSearch и php.
Как установить?
Если вы используете Composer, то вы можете установить его следующей командой:
$ composer install foolz/sphinxql-query-builder --save
Или клонировать его из гитхаб репозитория.
Сравнение подходов
Пример без использования Query Builder:
<?php
$conn = new mysqli('localhost', null, null, null, 9306);
if ($conn->connect_error) {
throw new Exception('Connection Error: ['.$conn->connect_errno.'] '.$conn->connect_error, $conn->connect_errno);
}
$resource = $conn->query('SELECT * FROM anime_index WHERE MATCH('@character Asuka') AND age BETWEEN 12 AND 19');
$results = array();
while ($row = $resource->fetch_assoc()) {
$results[] = $row;
}
$resource->free_result();
// Теперь, можно вывести массив с полученными результатами
var_dump($results);
А вот и кусок кода с использованием Query Builder:
<?php
use FoolzSphinxQLConnection;
use FoolzSphinxQLSphinxQL;
$conn = new Connection();
$conn->setParams(array('host' => 'localhost', 'port' => 9306));
$query = SphinxQL::create($conn)
->select('*')
->from('anime_index')
->match('character', 'Asuka');
// В отличии от предыдущего примера, вы с лёгкостью сможете изменить запрос
$query->where('age', 'between', array(12, 19));
// Массив с полученными результатами
$result = $query->execute();
Не правда ли гораздо нагляднее и проще?
Немного подытожим
Хоть мы и можем писать запросы используя MySQLi, но Query Builder позволяет писать более понятные и легко поддерживаемые запросы. Я думаю пример указанный выше очень наглядно это показывает. Больше примеров и документация по использованию библиотеки, вы можете найти на гитхабе.
Автор: DonRai