2010-07-21 6 views
0

Okay donc j'ai ce script de recherche de site Web et j'essaye de compter combien d'enregistrements seront montrés quand l'utilisateur entre là terme ou termes de recherche. Je me demandais comment je serais capable de le faire quand je ne sais pas quels mots-clés seront entrés?PHP & MySQL - Comment compter le nombre d'enregistrements

Voici ma requête de recherche.

Voici la partie de mon code de recherche 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"; 

Voici la première erreur.

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 

Voici la deuxième erreur.

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

Échapper à votre entrée !! [mysql_real_escape_string] (http://php.net/mysql_real_escape_string), sauf si vous avez envie d'aller jusqu'au bout pour utiliser [PDO] (http://php.net/pdo) et les instructions préparées. Aucun autre moyen d'éviter de grosses erreurs et de se faire pirater. – Matchu

+0

Je sais tout ce que je l'ai laissé hors de mon code pour savoir merci bien – lone

Répondre

2

magasin la partie de votre requête SQL après FROM dans une variable, vous pouvez utiliser COUNT(*) pour obtenir la quantité de lignes:

$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

Comment ferais-je cela? désolé pour mon ignorance. – lone

+1

'mysql_fetch_row ($ result) [0]' n'est pas une syntaxe PHP légale. Vous devez d'abord stocker le tableau de lignes dans une variable avant d'accéder à son index. – BoltClock

+0

@BoltClock, merci! Venant d'un arrière-plan 'C/C++', j'oublie parfois cet écueil de' PHP'. –

1

Vous pouvez également jeter un oeil à mysql_num_rows()

+0

+1. Si la requête est simple, l'exécution de deux pourrait être bien. Mais si la requête est compliquée et que vous ne faites pas de pagination, c'est la meilleure solution. – Matchu

+0

@Matchu Je fais la pagination Je ne peux pas compter le nombre de lignes. – lone

+1

@Ion, alors ma solution est appropriée. –

Questions connexes