Если я запустил этот простой запрос с консоли, просто набрав
SELECT COUNT(*) AS total FROM articles WHERE MATCH(title) AGAINST ('+php +mysql' IN BOOLEAN MODE)
Я получаю много результатов. Теперь я пытаюсь подготовить это утверждение в php.
$keywords = ['php', 'mysql']; $against = ''; for($i = 0; $i < count($keywords); $i++){ $against .= '+? '; } $query = 'SELECT COUNT(*) AS total FROM articles WHERE MATCH(title) AGAINST ('.$against.' IN BOOLEAN MODE)'; //my query is now 'SELECT COUNT(*) AS total FROM articles WHERE MATCH(title) AGAINST (+? +? IN BOOLEAN MODE)' $stmt = $pdo->prepare($query); $stmt->execute($keywords);
Этот скрипт возвращает только результаты, если используется только 1 ключевое слово. Имея 2 ключевых слова, он не возвращает значения и не имеет ошибок (но работает в консоли). Поэтому я подозреваю, что я готов подготовить свое заявление с pdo. Есть идеи?
Вы должны просто создать заявление следующим образом:
$query = 'SELECT COUNT(*) AS total FROM articles WHERE MATCH(title) AGAINST (:query IN BOOLEAN MODE)'; $stmt = $pdo->prepare($query);
Затем привяжите параметры:
$keywords = ['php', 'mysql']; $against = ''; for($i = 0; $i < count($keywords); $i++){ $against .= ' +' . $keywords[$i]; } $stmt = $pdo->prepare(array( ':query' => $against ));