Bonjour bonjour !

je suis en train de creer un systéeme de news mais il me ça :

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given


j'ai donc regardé au niveau de mon fetch array, je suis novice en php donc jvois pas trop le pb, je pensais avoir bien fait ! si qqn px m'aider Smiley decu

voila mon php :

$DB = new PDO("mysql:dbname=michel;host=localhost", "root", "");
$DB->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

$DB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
mysql_select_db("news");
// je récupère les cinq dernières news.
$retour = mysql_query('SELECT * FROM news ORDER BY id DESC LIMIT 0, 5');
while ($donnees = mysql_fetch_array($retour))
{
?>
<div class="news">
    <h3>
        <?php echo $donnees['titre']; ?>
        <em>le <?php echo date('d/m/Y à H\hi', $donnees['timestamp']); ?></em>
    </h3>
    
    <p>
    <?php
    // On enlève les éventuels antislashs, PUIS on crée les entrées en HTML (<br />).
    $contenu = nl2br(stripslashes($donnees['contenu']));
    echo $contenu;
    ?>
    </p>
</div>
<?php
} 
?>

Modifié par Moustache (03 May 2014 - 15:41)
Très simple, il t'informe que ton paramètre (ce qui est entre parenthèse) dans la fonction mysql_fetch_array() est un booléen (true ou false), là où il doit y avoir une ressource mysql.

Pourquoi ?

mysql_query (ainsi que mysqli_query d'ailleurs, il me semble que PDO aussi) renvoient false quand mysql renvoie false.
mysql renvoie false quand il ne peut exécuter la requête : soit à cause d'une connexion inexistante, soit à cause d'une erreur dans la requête.

Dans ton cas précis maintenant, on vérifie la connexion :
- tu la fais à la première ligne en utilisant PDO.
- A la 4ème ligne, tu sélectionnes un base de données en mysql (pourquoi ne pas l'avoir fait dans le PDO ?)
- à la 6ème ligne tu fais un mysql_query qui te renvoie false

Pourquoi ? Parce qu'une connexion au mysql avec PDO ou avec l'extension mysql_ de PHP ce n'est pas pareil.

Si tu ouvres ta connexion en PDO, toutes tes fonctions mysql doivent être des PDO
Si tu ouvres ta connexion en mysqli_, toutes tes fonctions doivent être mysqli_
Si tu ouvres ta connexion en mysql_, toutes tes fonctions doivent être en mysql_. (et en fait, on ouvre plus des connexions en mysql_, on n'utilise plus des fonctions en mysql_ parce que ce sont des fonctions désuètes depuis juillet 2004 -sortie de PHP5- et obsolète depuis le PHP 5.5 et qu'il serait temps de moderniser les codes).

Bref, vu que t'as démarré en PDO, tu continues en PDO et ça corrigera tout seul ce bug-là ^^
Tu mélanges la pdo et la connexion classique. quand tu commences sur une voie continue sur la même.
En plus tu appelles deux fois ta database et qui n'est pas la même.

Essaye ça :

try
{
	$DB = new PDO('mysql:host=localhost; dbname=michel', 'root', '');
	$DB->exec("set names utf8");
}

catch(Exception $e)
{
    echo 'Erreur : '.$e->getMessage().'<br />';
    echo 'N° : '.$e->getCode();
	die();
}

$retour = $DB->prepare('SELECT * FROM news ORDER BY id DESC LIMIT 0, 5');
$retour->execute();

while($donnees=$retour->fetch())       
{
Merci Smiley smile ça fonctionne !
c'est vrai que ça parait logique ! on commence avec une connexion on fini avec !!
Vous êtes des chefs Smiley cligne