2009-08-19 5 views
1

Je cours la requête suivante, en attendant qu'il renvoie un INTEGER, mais il renvoie "Resource id # 3"
Qu'est-ce que je fais mal?Compte MySQL PHP (*) retournant quelque chose de bizarre

$queryPlans = mysql_query("SELECT count(*) FROM infostash.rooms"); 
echo $queryPlans; 

Il y a en fait 15 lignes dans ce tableau, et je voudrais revenir le numéro 15. Toutes les suggestions?

+3

Est-ce que 'php.net' (et il y a des miroirs de 20-bit) est à nouveau bas donc vous ne pouvez pas simplement lire la documentation-assez exhaustive-? Je ne comprends pas. – Bombe

Répondre

2

Vous devez:

$queryPlans = mysql_query("SELECT count(*) FROM infostash.rooms"); 
$row = mysql_fetch_array($queryPlans); 
echo $row[0]; 

mysql_query() ne retourne pas le résultat. Il retourne une ressource que vous pouvez parcourir et interroger pour les lignes (comme ci-dessus).

+0

Ouais c'est parfait mate merci beaucoup! –

1

Ceci est en fait le comportement attendu selon la documentation:

Pour SELECT, SHOW, DESCRIBE, EXPLAIN et d'autres déclarations qui reviennent resultset, mysql_query() retourne une ressource en cas de succès, ou FALSE en cas d'erreur.

C'est un select normal qui retourne une ligne avec une colonne et doit être traité comme tel. Vous pouvez appeler mysql_fetch_array sur le résultat:

$row = mysql_fetch_array($resource); 
$count = $row[0]; 
0

mysql_query() retourne un result resource. Vous avez besoin d'une autre fonction pour obtenir des "informations précieuses" de cette ressource. Dans ce cas, mysql_fetch_array()/mysql_fetch_row()/mysql_fetch_object comme indiqué par Cletus. Ou (puisque ce n'est qu'une seule valeur) mysql_result().
Toute requête sql peut échouer pour diverses raisons. Vous devez toujours vérifier la valeur de retour de mysql_query(). Si c'est FAUX, quelque chose s'est mal passé et mysql_error() peut vous en dire plus à ce sujet.

$mysql = mysql_connect(...) or die(mysql_error()); 
mysql_selecT_db(.., $mysql) or die(mysql_error($mysql)); 
$query = "SELECT count(*) FROM infostash.rooms"; 
$queryPlans = mysql_query($query, $mysql) or die(mysql_error($mysql)); 
$cRows = mysql_result($queryPlans, 0); 
echo $cRows; 
3

mysql_query retourne une ressource php (voir: http://www.php.net/manual/en/language.types.resource.php).

La ressource retournée doit ensuite être passée à mysql_fetch_assoc ou similaire.

Puisque vous obtenez seulement le nombre, vous pouvez utiliser les éléments suivants:

$queryPlans = mysql_query("SELECT count(*) FROM infostash.rooms"); 
$count = mysql_result($queryPlans,0,0); 
echo $count; 
0

Si vous prévoyez utiliser plus tard, la requête complète (par exemple, sélectionnez , plutôt que de compter ()), vous pouvez enregistrer vous-même une base de données en utilisant mysql_num_rows() sur la requête complète. Exemple:

$queryPlans = mysql_query("SELECT * FROM infostash.rooms"); 
$results = mysql_fetch_array($queryPlans); 
echo "There were " . mysql_num_rows($queryPlans) . " results"; 
while($row = mysql_fetch_assoc($queryPlans)){ 
    // Do stuff here 
} 
Questions connexes