2010-07-21 3 views
0

Итак, у меня есть этот скрипт поиска веб-сайта, и я пытаюсь подсчитать, сколько записей будет отображаться, когда пользователь вводит туда или термины поиска. Мне было интересно, как я смогу это сделать, когда я не знаю, какие ключевые слова будут введены?PHP и MySQL - Как подсчитать количество записей

Ниже мой поисковый запрос.

Вот часть моего поискового кода MySQL PHP &.

$search_explode = explode(" ", $search); 

foreach($search_explode as $search_each) { 
    $x++; 
    if($x == 1){ 
     $construct .= "article_content LIKE '%$search_each%' OR title LIKE '%$search_each%' OR summary LIKE '%$search_each%'"; 
    } else { 
     $construct .= "OR article_content LIKE '%$search_each%' OR title LIKE '%$search_each%' OR summary LIKE '%$search_each%'"; 
    } 

} 

$construct = "SELECT users.*, users_articles.* FROM users_articles 
       INNER JOIN users ON users_articles.user_id = users.user_id 
       WHERE $construct"; 

Это первая ошибка.

MySQL Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT users.*, users_articles.* FROM users_articles INNER JOIN users O' at line 

Это вторая ошибка.

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given 
+0

Побег ваш вход !! [mysql_real_escape_string] (http://php.net/mysql_real_escape_string), если вам не нравится использовать [PDO] (http://php.net/pdo) и подготовленные операторы. Нет другого способа избежать больших ошибок и взлома. – Matchu

+0

Я знаю все о том, что я оставил его из своего кода, чтобы узнать спасибо, хотя – lone

ответ

2

Храните часть вашего запроса после FROM в переменной, то вы можете использовать COUNT(*), чтобы получить количество строк:

$search_explode = explode(" ", $search); 

foreach($search_explode as $search_each) { 
    $x++; 
    if($x == 1){ 
     $construct .= "article_content LIKE '%$search_each%' OR title LIKE '%$search_each%' OR summary LIKE '%$search_each%'"; 
    } else { 
     $construct .= "OR article_content LIKE '%$search_each%' OR title LIKE '%$search_each%' OR summary LIKE '%$search_each%'"; 
    } 

} 

$from = "FROM users_articles 
     INNER JOIN users ON users_articles.user_id = users.user_id 
     WHERE $construct"; 

$count_query = "SELECT COUNT(*) " . $from; 

$result = mysql_query($count_query); 
$count_result = mysql_fetch_row($result); 
$count = $count_result[0]; 
+0

Как бы мне это сделать? извините за мое невежество. – lone

+1

'mysql_fetch_row ($ result) [0]' не является законным синтаксисом PHP. Перед доступом к его индексу вам нужно будет сохранить массив строк в переменной. – BoltClock

+0

@BoltClock, спасибо! Исходя из фона 'C/C++', я иногда забываю эту ловушку 'PHP'. –

1

Вы также можете взглянуть на mysql_num_rows()

+0

+1. Если запрос прост, запуск двух может быть прекрасным. Но если запрос сложный, и вы не занимаетесь разбиением на страницы, это лучший способ. – Matchu

+0

@Matchu Я делаю разбивку на страницы Я просто не могу подсчитать количество строк. – lone

+1

@ Только, тогда мое решение подходит. –

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