2010-05-26 4 views
2

En essayant d'obtenir la quantité d'éléments dans un tableau en utilisant la fonction count(), le résultat est un peu déroutant pour moi, considérons l'exemple suivant. Supposons que l'ID utilisateur fourni est erroné et que, par conséquent, il n'y ait pas de correspondance, le résultat de la fonction count ne sera-t-il pas 0? pourtant c'est 1. Pouvez-vous m'expliquer pourquoi?PHP en utilisant count() avec le tableau

grâce

$q = mysql_query("select password from users where user_name = '" . $userID . "'"); 
$check = mysql_fetch_array($q); 

$result = count($check); 

echo "RESULT:" . $result; 
+0

Débogage le code vous donnera un aperçu de ce résultat est en fait $. Aussi, n'oublie pas ton ami is_array(). – allnightgrocery

Répondre

7

C'est la mauvaise façon de compter les lignes dans un jeu de résultats. Tout d'abord, de la documentation sur mysql_fetch_array()

Retourne un tableau de chaînes qui correspond à la ligne récupérée, ou FALSE s'il n'y a pas plus de lignes.

Ergo, si nous le faisons

echo count(false); 

Nous pouvons voir la sortie est 1. Pourquoi? Parce que la documentation count() nous dit que, ainsi

Si var est pas un tableau ou un objet avec interface Countable mis en œuvre, 1 sera retourné.

Pour faire un bon nombre, utilisez mysql_num_rows()

$q = mysql_query("select password from users where user_name = '" . $userID . "'"); 
$result = mysql_num_rows($q); 

if (0 == $result) 
{ 
    // no rows in result 
} 
1

count() retourne 1 car en cas d'échec $check est pas un tableau.

De l'documentation:

Si var est pas un tableau ou un objet avec implémenté l'interface Countable, 1 sera retourné

Mais vous devriez quand même traiter les cas d'erreur directement (si la requête échoue votre code ne devrait même pas arriver au point où vous analysez ses résultats). Aussi comme d'autres l'ont dit correctement, ce n'est pas comment vous comptez le nombre de résultats qu'une requête renvoie car c'est ce que mysql_num_rows() est pour

0

mysql_fetch_array retourne false s'il n'y a plus de lignes. = 1.

Essayez d'utiliser mysql_num_rows si vous souhaitez compter le nombre de résultats.

1

utilisez mysql_num_rows au lieu de compter. count renvoie 1 pour la valeur FALSE

+0

$ numrows = mysql_num_rows ($ q); –