COUNT() retourne un entier ou une chaîne ?

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

17 avr. 2009, 10:27

Je n'ai pas trouvé réponse sur le forum, mais aiguillez moi si vous trouvez.
<?php

require_once ('../connexion.inc.php');
$sql2 = "SELECT COUNT(*)  as nb FROM utilisateur";
$resultat = mysqli_query( $link, $sql2 );
while($r = mysqli_fetch_assoc($resultat))
{
	echo '<pre>';
	var_dump($r);
	if($r['nb'] === 1)
	{
		$ok = true;
	}
}
?>

Code : Tout sélectionner

array(1) { ["nb"]=> string(1) "3" }
J'ai besoin de dénombrer les enregistrements en base, j'utilise COUNT() sur une BDD MySQL, or en PHP, je reçois une chaîne. Dans la doc MySQL, il est dit que COUNT() renvoie un BIGINT.
Alors, c'est les BIGINT qui deviennent des chaînes en PHP ? Ou juste COUNT() qui fait pas ce qu'on veut ?
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

17 avr. 2009, 10:31

Damned ! :shock:

ViPHP
ViPHP | 1024 Messages

17 avr. 2009, 10:48

C'est probablement le fetch_assoc qui renvoie un tableau de chaînes.

A+

Pascal

ViPHP
ViPHP | 5924 Messages

17 avr. 2009, 12:15

C'est probablement le fetch_assoc qui renvoie un tableau de chaînes.
Je serais plus de cet avis.
Internement à mysql, le count() est considéré comme un bigint. On pourra faire une opération d'entier dessus. Mais une fois passé au driver, il représente la donnée de la manière qui lui est la plus simple à manipuler…

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

17 avr. 2009, 12:27

$sql_doublon = "SELECT COUNT(*)  as nb FROM utilisateur";
$resultat = mysqli_query( $link, $sql_doublon );
while($r = mysqli_fetch_row($resultat)) 
{
	echo '<pre>';
	var_dump($r);
	
	if($r[0] == 0) // "0" ou "1"
	{
		//echo unique
	}
	
}

Code : Tout sélectionner

array(1) { [0]=> string(1) "3" }
[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

17 avr. 2009, 12:47

$sql_doublon = "SELECT CAST(COUNT(*) AS UNSIGNED INTEGER)  as nb FROM utilisateur";

Code : Tout sélectionner

object(stdClass)#3 (1) { ["nb"]=> string(1) "3" }
Je crois que la transmission MySQL => PHP sur ce coup là, transtype. Mais pourquoi ?
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

ViPHP
ViPHP | 1024 Messages

17 avr. 2009, 14:07

Je crois que la transmission MySQL => PHP sur ce coup là, transtype. Mais pourquoi ?
parce que :
http://fr.php.net/manual/fr/function.my ... -assoc.php
Valeurs de retour
Retourne un tableau associatif de chaînes qui contient la ligne lue dans le résultat result , ou bien FALSE s'il ne reste plus de lignes à lire.
ça doit être la même chose pour mysqli_fetch_assoc().

A+

Pascal

ViPHP
ViPHP | 5924 Messages

17 avr. 2009, 14:23

C'est beaucoup plus chiant de gérer tous les types entier, flottant, etc, que d'utiliser un type générique qui fait tout…

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

20 avr. 2009, 14:46

Modération :
mere-teresa, si ta question est résolue, pense à ajouter le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.
Tu peux réaliser cette opération en cliquant sur le bouton Image en haut à gauche de ce sujet.


:langue:
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...