2012-06-11 4 views
1

Я сделал простой поиск запросов MySQL на одном из моих сайтов PHP, но он не работает так, как я ожидаю. Когда пользователь ищет термин в моей строке поиска, если контент, который он/она ищет, не существует, моя функция должна возвращать «никаких результатов». но он просто отображается пустым, ничего не сообщается.PHP MySQL Search не работает?

Вот мой код для поиска:

function querySearch($searchTerm) { 
    $query = "SELECT * FROM content_en WHERE content_body LIKE '%{$searchTerm}%' ORDER BY id DESC "; 
    return $query; 
} 

function getSearch($searchTerm) { 
    $queryContents= querySearch($searchTerm); 
    $exeQuery = mysql_query($queryContents); 
    while($fetchSet = mysql_fetch_array($exeQuery)){ 
     if(empty($fetchSet)){ 
      echo "No Results Found"; 
     }else{ 
      if(empty($fetchSet['content_title'])){ 
       echo 'Sorry No results Found'; 
      }else{ 
       echo '<h2><a href="index.php?pageId='.$fetchSet['id'].'">'.$fetchSet['content_title'].'</a></h2><br/>'; 
       echo '<div>'.shortText($fetchSet['content_body'], 220).'</div><br/><br/>'; 
      } 
     } 
    } 

} 

Просто мой заставить его работать, так вот почему есть две проверки для fetchSet массива один для всего массива один для только одного ключа. Но да, это не работает.

+1

Только примечание, вы должны использовать 'mysqli_ *' или '' PDO' как mysql_ * 'осуждается. –

+1

@TimWithers Вы имеете в виду «обескураженный», хотя я думаю, что это по сути то же самое – Mike

+0

@Mike, вы правы. Это была ошибка с моей стороны. Это понедельник ... –

ответ

2

Причина это не работает, потому что есть либо ошибка в запросе или он не дал результатов.

Во-первых, вы должны добавить какой-то обработки ошибок в вашей mysql_query, как это:

$exeQuery = mysql_query($queryContents) or die(mysql_error()); 

Во-вторых, причина, он никогда не печатать бы ничего, если не найдено ни результатов, потому что mysql_fetch_array будет только перебираем результаты, если есть результат для получения. Поэтому, если возвращается 0 строк, весь цикл while пропущен полностью. Вместо этого вы можете использовать mysql_num_rowsПЕРЕД вы петля.

Например:

if (mysql_num_rows($exeQuery) > 0) { 
    while($fetchSet = mysql_fetch_array($exeQuery)){ 
     echo '<h2><a href="index.php?pageId='.$fetchSet['id'].'">'.$fetchSet['content_title'].'</a></h2><br/>'; 
     echo '<div>'.shortText($fetchSet['content_body'], 220).'</div><br/><br/>'; 
    } 
} 
else { 
    echo "No Results Found"; 
} 
+0

Я считаю, что первый, если блок внутри цикла while является избыточным. Это должно быть проверено с помощью 'mysql_num_rows ($ exeQuery)', так что на самом деле это никогда не должно происходить (я думаю). Пожалуйста, поправьте меня, если я ошибаюсь! – Sephallia

+0

Ты абсолютно прав. Я обновил свой ответ. – Mike

1

Попробуйте этот код

function querySearch($searchTerm) { 
    $query = "SELECT * FROM content_en WHERE content_body LIKE '%{$searchTerm}%' ORDER BY id DESC "; 
    return $query; 
} 

function getSearch($searchTerm) { 
    $queryContents = querySearch($searchTerm); 
    $exeQuery = mysql_query($queryContents); 
    if(mysql_num_rows($exeQuery) > 0) 
    { 
     while($fetchSet = mysql_fetch_array($exeQuery)) 
     { 
      echo '<h2><a href="index.php?pageId='.$fetchSet['id'].'">'.$fetchSet['content_title'].'</a></h2><br/>'; 
      echo '<div>'.shortText($fetchSet['content_body'], 220).'</div><br/><br/>'; 
     } 
    } 
    else 
    { 
     echo "No Results Found"; 
    } 
} 
1

Я не 100% уверен в этом, но я вспоминаю, что mysql_fetch_array будет работать только если есть фактические результаты надуманные. Цикл while будет работать только при успешной работе функции mysql_fetch_array. Однако, когда запрос не возвращает никаких результатов, mysql_fetch_array не будет успешно запущен, поэтому цикл не будет запущен, таким образом, вашему блоку if не будет предоставлена ​​возможность запускать.

Редактировать: Код Habeeb должен исправить вашу проблему для вас: p. Сохраняя мой ответ, хотя, поскольку я даю некоторое объяснение по поводу проблемы с вашим кодом. Я уверен, что это будет полезная ссылка на тех, кто может смотреть на это в будущем.

1

Попробуйте один ..

function querySearch($searchTerm) { 
    $query = "SELECT * FROM content_en WHERE content_body LIKE '%{$searchTerm}%' ORDER BY id DESC"; 
    return $query; 
} 

function getSearch($searchTerm) { 
    $queryContents= querySearch($searchTerm); 
    $exeQuery = mysql_query($queryContents); 
    $num_rows = mysql_num_rows($exeQuery); 
    if($num_rows) 
    { 
     while($fetchSet = mysql_fetch_array($exeQuery)){ 
      echo '<h2><a href="index.php?pageId='.$fetchSet['id'].'">'.$fetchSet['content_title'].'</a></h2><br/>'; 
      echo '<div>'.shortText($fetchSet['content_body'], 220).'</div><br/><br/>'; 
     } 
    }else{ 
     echo "No Result Found!"; 
    } 
}