PHP-версия функции выхода sphinxapi у меня не работала в тестах.Кроме того, он не обеспечивает защиту от символов SQL-инъекций (например, одинарные кавычки).
Мне понадобилась эта функция:
function EscapeSphinxQL ( $string )
{
$from = array ( '\\', '(',')','|','-','!','@','~','"','&', '/', '^', '$', '=', "'", "\x00", "\n", "\r", "\x1a" );
$to = array ( '\\\\', '\\\(','\\\)','\\\|','\\\-','\\\!','\\\@','\\\~','\\\"', '\\\&', '\\\/', '\\\^', '\\\$', '\\\=', "\\'", "\\x00", "\\n", "\\r", "\\x1a" );
return str_replace ( $from, $to, $string );
}
Обратите внимание на дополнительные обратные слеши для символов, специфичных для Sphinx.Я думаю, что происходит то, что они помещают весь ваш запрос через синтаксический анализатор SQL, который удаляет обратную косую черту «посторонний» для целей SQL (то есть «\ & '->' & ').Затем он помещает предложение MATCH через синтаксический анализатор полного текста, и внезапно '&' становится специальным символом.Итак, в начале вам понадобятся дополнительные обратные слеши.