2015-10-10 4 views
0

Я создал простой поисковый запрос. Когда пользователь заполняет вход и отправляет его, он создает поисковый запрос, который получается из информации о базе данных, которая соответствует указанным ключевым словам.php - Поисковый запрос

Но когда я посылаю ключевые слова, дает мне ошибку:

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\www.c++.com\search-query.php on line 59

Результаты не найдены для "C++"

мой файл PHP выглядит следующим образом:

<form id="search" method="get" action="search-query.php"> 
     <input type="text" name="keywords" placeholder="Search..." /> 
     <input type="submit" value="Go" style="margin:10px" /> 
    </form> 

и поисковый запрос:

<form id="search" method="get" action="search-query.php"> 
    <input type="text" name="keywords" placeholder="Search..." value="<?php echo $_GET['keywords']; ?>" /> 
    <input type="submit" value="Go" style="margin:10px" /> 
</form> 


     <div> 
      <?php 
       $i = 0; 
       $keywords = $_GET['keywords']; 
       $terms = explode(" ",$keywords); 
       $query = "SELECT * FROM search WHERE "; 

       foreach ($terms as $term){ 
        $i++;     
        if ($i == 1) 
         $query .="keywords LIKE '%$term%' "; 
        else 
         $query .= "OR keywords LIKE '%$term%' "; 
       } 

       //connect 

       mysql_connect("localhost", "root", ""); 
       mysql_select_db("search"); 

       $query = mysql_query($query); 
       $numrows = mysql_num_rows($query); 
       if($numrows > 0){ 

        while ($row = mysql_fetch_assoc($query)){ 
         $id = $row['id']; 
         $title = $row['title']; 
         $description = $row['description']; 
         $key = $row['keywords']; 
         $link = $row['link']; 
        } 

        echo "<h2><a href='$link'>$title</a></h2> 
        $descripton"; 

       } else echo "No results found for \"<b>$keywords</b>\""; 

       //disconnect 
       mysql_close(); 


      ?> 
     </div> 

Я не знаю, почему моя переменная $query является логическим типом. Если anybode может мне помочь, я буду очень благодарен.

EDIT: Я сделал некоторые изменения, я изменил mysqli, но теперь у меня есть другая ошибка: Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in C:\xampp\htdocs\www.c++.com\search-query.php on line 60 Тем не менее мой $query является логическим типом

Сценария:

<?php 
     $i = 0; 
     $keywords = $_GET['keywords']; 
     $terms = explode(" ",$keywords); 
     $query = "SELECT * FROM search WHERE "; 

     foreach ($terms as $term){ 
      $i++;     
      if ($i == 1) 
       $query .="keywords LIKE '%$term%' "; 
      else 
       $query .="OR keywords LIKE '%$term%' "; 
     } 

     //connect 

     $link = mysqli_connect("localhost", "root", "", "search"); 
     $query = mysqli_query($link, $query); 
     $numrows = mysqli_num_rows($query); 
     if($numrows > 0){ 

      while ($row = mysqli_fetch_assoc($query)){ 
       $id = $row['id']; 
       $title = $row['title']; 
       $description = $row['description']; 
       $key = $row['keywords']; 
       $link = $row['link']; 
      } 

      echo "<h2><a href='$link'>$title</a></h2> 
      $descripton"; 

     } else echo "No results found for \"<b>$keywords</b>\""; 

     //disconnect 
     mysqli_close($link); 


    ?> 
+0

Это просто означает, что с вашим запросом что-то не так. Вам нужно каким-то образом увидеть ошибки mysql (с обработкой ошибок mysql, журналом ошибок или напечатать строку запроса $ и попробовать выход в консоли или phpmyadmin или так) – minychillo

+0

эхо ваш запрос и посмотреть, если он выполняется правильно .....и я предлагаю переименовать результат с чем-то иначе, чем jus $ query –

+0

Если я эхо '$ query' ничего не показывает –

ответ

0

Вашего proble является наиболее вероятно, эта строка:

$query = mysql_query($query); 

Объяснение заключается в PHP documentation

For SELECT, SHOW, DESCRIBE, EXPLAIN and other statements returning resultset, mysql_query() returns a resource on success, or FALSE on error.

0

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

Вы должны (в случае, если это является причиной отказа запроса), а для обеспечения безопасности поисковые запросы с mysql_real_escape_string().

Вы можете проверить, успешно ли запрос рад, выведя результат mysql_error() после выполнения запроса, но перед проверкой строк.

Кроме того, вы должны поменять местами использование нового MySQL-клиента api, такого как mysqli или PDO, хотя это не является причиной вашей текущей проблемы.

0

Используйте mysqli_query функцию как это:

$link = mysqli_connect($host, $user, $password, $db); 

$query = mysqli_query($link, $query); 

Он возвращает mysqli_result объект.

+0

Я сделал это, но для этого требуется 2 параметра, 1 параметр' $ query', но я не Не знаю, какой параметр нужен как второй –

+0

Я отредактировал ответ. Первый параметр - это ссылка на соединение db, вторым параметром является запрос. – kotapeter

0

Вот ответ для вашей ситуации:

class DB { 

      public static function connect($host, $db_name, $db_username, $db_password) { 
       try { 
        $dbh = new PDO('mysql:host=' . $host . ';dbname=' . $db_name, $db_username, $db_password); 
        $dbh->exec("set names utf8"); 
        return $dbh; 
       } catch (PDOException $e) { 
        die('Error Connecting To DataBase: ' . $e); 
       } 
      } 

     } 

     $filtered_keywords = filter_input(INPUT_GET, 'keywords'); 
     $query = "SELECT * FROM search WHERE 1=1 "; 

     $keywords = explode(" ", $filtered_keywords); 
     foreach ($keywords as $keyword) { 
      $query .= " OR keywords LIKE '%$keyword%' "; 
     } 
$dbh = DB::connect('localhost', 'db_name', 'root', ''); 
     $query .=";"; 
     $sth = $dbh->prepare($query); 
     $rows = $sth->fetchAll(PDO::FETCH_ASSOC); 
    $output = ''; 
     foreach ($rows as $row) { 
      $id = $row['id']; 
      $title = $row['title']; 
      $description = $row['description']; 
      $key = $row['keywords']; 
      $link = $row['link']; 
    $output .= "<h2><a href='$link'>$title</a></h2> 
         $descripton"; 
     } 

    print(strlen($output)>0?$output:"No results found for \"<b>$keywords</b>\""); 

Успехов!

Смежные вопросы