Pull to refresh

Query Builder библиотека для работы с SphinxQL

Reading time2 min
Views12K
Одна из самых важных задач стоящих при разработке сайта, это реализация полнотекстового поиска. Один из популярных и простых вариантов реализации, это использование Sphinx. На хабре уже есть посвящённые ему статьи, но не заслуженно не упомянута библиотека Query Builder. Это я и постараюсь исправить.

image

Введение

Одна из самых важных задач стоящих при разработке сайта, это реализация полнотекстового поиска. Один из популярных и простых вариантов реализации, это использование 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 Foolz\SphinxQL\Connection;
use Foolz\SphinxQL\SphinxQL;

$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 позволяет писать более понятные и легко поддерживаемые запросы. Я думаю пример указанный выше очень наглядно это показывает. Больше примеров и документация по использованию библиотеки, вы можете найти на гитхабе.
Tags:
Hubs:
Total votes 7: ↑5 and ↓2+3
Comments5

Articles