В следующем запросе будет использован скрипт поиска. По какой-то причине он не будет возвращать все результаты, когда любое условие истинно. Что я делаю не так?
$sql = "SELECT name, id_code from codes WHERE name LIKE '%$q%' OR id_code LIKE '%$q%'"; $result = mysql_query($sql); $query = mysql_query($sql) or die ("Error: ".mysql_error()); $num_rows1 = mysql_num_rows($result); if ($result == "") { echo ""; } echo ""; $rows = mysql_num_rows($result); if($rows == 0) { print("<div id=norequests>No results for <strong>$q</strong></div>"); } elseif($rows > 0) { while($row = mysql_fetch_array($query)) { $name = htmlspecialchars($row['name']); $code = htmlspecialchars($row['id_code']); } print("$code: $name<br /> <br />"); } } else{ echo '<div id="error">No results for $q.</div>'; }
Вы печатаете за пределами while
. Это означает, что независимо от того, сколько результатов у вас есть, будет напечатан только один.
Либо печать внутри цикла
while($row = mysql_fetch_array($query)) { $name = htmlspecialchars($row['name']); $code = htmlspecialchars($row['id_code']); print("$code: $name<br /> <br />"); }
или собирать переменные в массиве во время цикла и использовать их после цикла, как вам нравится
$result_array = array(); while($row = mysql_fetch_array($query)) { $name = htmlspecialchars($row['name']); $code = htmlspecialchars($row['id_code']); $result_array[] = array( 'name' => $name, 'code' => $code ); } print_r($result_array);
Ваш цикл перезаписывает значение $name
и $code
с каждым циклом, поэтому все, что вы в конце концов увидите, это значение последнего цикла.
while( $row = mysql_fetch_array( $query ) ) { $name = htmlspecialchars($row['name']); $code = htmlspecialchars($row['id_code']); }
Вы можете отбросить эти значения из своего цикла или направить их в коллекцию где-нибудь:
while ( $row = mysql_fetch_array( $query ) ) { $names[] = htmlspecialchars( $row["name"] ); $codes[] = htmlspecialchars( $row["id_code"] ); }
Или вы можете поместить оба значения в один массив:
$set = array(); while ( $row = mysql_fetch_array( $query ) ) { $set[] = array( "Name" => htmlspecialchars( $row["name"] ), "Code" => htmlspecialchars( $row["id_code"] ) ); }
На этом этапе вы загрузили все имена и коды в массивы (или массив), которые можно манипулировать после того, как ваш цикл запустил курс.
print_r( $names ); // or $set
Кроме того, у вас есть избыточный код:
$result = mysql_query($sql); $query = mysql_query($sql) or die ("Error: ".mysql_error());
Это дважды выполнит ваш запрос – нет необходимости в этом.
$num_rows1 = mysql_num_rows($result); $rows = mysql_num_rows($result);
Это подсчет количества возвращаемых строк дважды. Опять же, нет необходимости в этом.
Вы действительно не должны использовать MySQL для полнотекстового поиска (см .: http://en.wikipedia.org/wiki/Full_text_search ). Вместо этого рассмотрите возможности полнотекстового использования MySQL: http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html . Или, возможно, даже лучше, используйте «реальную» полнотекстовую поисковую систему, такую как Lucene (см .: http://lucene.apache.org/ ) или Sphinx (см .: http://sphinxsearch.com/ ).