Проблемы с матчем против

я пытаюсь создать поисковую систему с php и mysql, и я снова использую совпадение.

Однако у меня проблема (вероятно, синтаксис), которая сводит меня с ума.

Вот код:

<?php 
$busqueda= $_GET["words"];
require("conectdb.php");

if ($busqueda<>''){ 

   $trozos=explode(" ",$busqueda); 
   $numero=count($trozos); 
  if ($numero==1) { 

   $cadbusca="SELECT * FROM post WHERE contenido LIKE '%$busqueda%' OR titulo LIKE '%$busqueda%'"; 
  } elseif ($numero>1) { 

    $cadbusca="SELECT * , MATCH ( 'titulo', 'contenido' ) AGAINST ( '$busqueda' )  AS Score FROM post WHERE MATCH ( 'titulo', 'contenido' ) AGAINST ( '$busqueda' ) ORDER BY Score DESC";

} 

$result=(mysql_query($cadbusca)); 
while($info = mysql_fetch_array($result))
{ 
  echo $info["id"]." ".$info["titulo"]." ".$info["contenido"]; 
} 
}
?> 

вот ошибка после поиска более чем одного слова:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home1/foodbook/public_html/search/wordsearch.php on line 19

Поля настроены на полный текст....

Спасибо


person Dan Stern    schedule 20.12.2010    source источник


Ответы (1)


Предупреждение означает, что ваш запрос не выполнен. Если запрос завершается ошибкой, mysql_query() возвращает логическое значение FALSE, и вы можете получить сообщение об ошибке с помощью mysql_error():

$res = mysql_query($cadbusca);
if ($res === FALSE) {
      die("Query failed: " . mysql_error());
}

Ваш код предполагает, что запрос выполнен успешно, и пытается получить строку из этого ложного значения, которое не является допустимым дескриптором результата. Плохая практика предполагать, что запрос будет выполнен успешно. Даже если строка запроса синтаксически допустима, существует множество других причин, по которым может произойти сбой, и вы должны проверять успешность (или неудачу) на каждом шаге.

person Marc B    schedule 20.12.2010
comment
Я предполагаю, что ошибка будет заключаться либо в неэкранированных специальных символах в $busqueda, либо в отсутствии действительного INDEX. ОП говорит, что для полей задан полнотекстовый режим, MATCH требуется комбинированный индекс, если вы используете несколько полей одновременно. - person Orbling; 21.12.2010