Erreur

Eléphant du PHP | 79 Messages

18 oct. 2012, 16:33

Salut,

J'ai une erreur sur ce code :
    public function getMostDropWheat() {
        $row = mysql_fetch_assoc(mysql_query('SELECT `uuid` name, SELECT `description` name2, COUNT(`num_pickedup`) count
                                                FROM pickdropview
                                                WHERE `num_pickedup` IS NOT NULL
                                                    AND `num_dropped` IS NULL
                                                    AND `description` == "Wheat"
                                                GROUP BY `uuid`
                                                ORDER BY count DESC'));
        return $row;
    }
<?php
            $ar = $serverObj->getMostDropWheat();
            $player = $serverObj->getPlayer($ar['name']);
            if ($player) { 
            	        echo(STRING_ALL_DISTANCER); 
            	?>: 
                        <a class="fort" href="?view=player&uuid=<?php echo($player->getUUID()); ?>"><?php echo($player->getName()); ?></a>
            <?php 
            	        echo $ar['count'];
            	    ?>
            <?php } else echo(STRING_ALL_NONE); ?>
Qui me retourne :
WARNING: MYSQL_FETCH_ASSOC() EXPECTS PARAMETER 1 TO BE RESOURCE, BOOLEAN GIVEN IN C:\EASYPHP\WWW\STATISTICIAN\STATISTICIAN\_SERVEROBJ.PHP ON LINE 435


J'ai essayé de tourner le 1er code dans tous les sens, mais je trouve pas...
Mon site dédié à Minecraft : http://www.orminecraft.com
Et celui dédié à ses serveurs multijoueur ;) http://www.serveurs-minecraft.net

Eléphanteau du PHP | 45 Messages

18 oct. 2012, 19:47

SELECT `uuid` name, SELECT `description` name2, COUNT(`num_pickedup`) count
C'est mieux si tu mets
SELECT name.uuid, name2.description, COUNT(num_pickedup) as count
si je me trompe pas...

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

18 oct. 2012, 19:55

salut


ta requete SQL est foireuse, mysql_query retourne false, mysql_fetch_assoc crit.

il fait que tu code un poil plus proprement pour gérer correctement les erreurs. Y'a plus de lignes mais au moins tu sais d’où ça vient :)

vu que tu semble "aimer" la POO tu devrait t'orienter vers PDO plutot que d'utiliser l'extension mysql qui est dépréciée et vouée à disparaitre (ou utiliser mysqli au minimum ;) )

ton code peux être corrigé ainsi
<?php
public function getMostDropWheat() {
	$sql = 'SELECT  uuid  name, SELECT  description  name2, COUNT( num_pickedup ) as nombre
				FROM pickdropview
				WHERE  num_pickedup  IS NOT NULL
					AND  num_dropped  IS NULL
					AND  description  == \'Wheat\'
				GROUP BY  uuid 
				ORDER BY count DESC';
	$ret = mysql_query($sql);
	if($ret === false) {
		throw new Exception('Erreur SQL : '.mysql_error()."\n".'Avec la requete : '.$sql;
	}
	$row = mysql_fetch_assoc($ret);
	return $row;
}
Si tu l’exécute et récupère l'exception qui va être levée tu verra que ta requete SQL n'est pas syntaxiquement correct !
d'ailleurs count étant un mot clef SQL il est préférable de ne pas l'utiliser même en tant qu'alias

@asf21 : as n'est pas obligatoire, mais tu as raison la requête est foireuse ;)

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 45 Messages

18 oct. 2012, 20:20

@moogli: Ah ouai tiens? Bah me coucherai moins bête! lol :mrgreen:
Merci!
Par contre, je savais pas qu'on pouvait mettre deux SELECT dans une requête... Vais relire la doc, ca m'apprendra!

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

18 oct. 2012, 20:24

@moogli: Ah ouai tiens? Bah me coucherai moins bête! lol :mrgreen:
Merci!
Par contre, je savais pas qu'on pouvait mettre deux SELECT dans une requête... Vais relire la doc, ca m'apprendra!

tu peux mettre en mettre plus que ça, cela s'appel sous requete.

Sauf que cela ne dispense pas de respecter la syntaxe SQL ce qui n'est pas le cas ici :)


@+
Il en faut peu pour être heureux ......