Problème avec foreach et non while

Matthieu
Invité n'ayant pas de compte PHPfrance

15 nov. 2011, 15:20

Bonjour,

Je suis en train de faire un site, et lorsque je récupère les données depuis la base j'ai quelque problème.
$sql = 'SELECT * FROM monchefadit_quotes order by id;';
$result = mysql_query($sql, $dbconnect) or exit('Error SQL !<br>'.$sql.'<br>'.mysql_error());

$quotes = mysql_fetch_array($result);
Ici, si je fais un :
foreach ($quotes as $quote)
var_dump($quote);
J'ai une erreur car il me retourne qu'une ligne de ma table, alors que si j'utilise le while:
while ($quotes = mysql_fetch_array($result)){
echo $quotes["date"];
}
J'ai bien toute mes lignes de ma table... J'ai l'habitude de développer avec foreach (avec frameworks) mais là je ne comprends pas...

ViPHP
ViPHP | 5462 Messages

15 nov. 2011, 15:42

while est foreach c'est pas la même chose, tu comprends comment fonctionne le while ?

Matthieu
Invité n'ayant pas de compte PHPfrance

15 nov. 2011, 15:53

Je sais que le foreach parcours un tableau.. Et je pense que le while permet de parcourir la base de donnée tant que c'est true ?

ViPHP
ViPHP | 5462 Messages

15 nov. 2011, 15:59

Je sais que le foreach parcours un tableau.. Et je pense que le while permet de parcourir la base de donnée tant que c'est true ?
le while continue de touner tant que l'expression est vrai, et a chaque appelle de mysql_fetch_* on va chercher une nouvelle ligne donc en gros
$result = mysql_query('...');
$ligne1 = mysql_fetch_assoc($result);
$ligne2 = mysql_fetch_assoc($result);
$ligne3 = mysql_fetch_assoc($result);
...
$ligneN = mysql_fetch_assoc($result);
quand y'a plus de résultat mysql_fetch_* renvoie false, donc l'expression dans le while vaut false et ça s’arrête

donc ce que t’essayes de faire avec ton foreach n'est pas possible nativement, et encore le plus logique aurai été de faire :
foreach ($result as $quote)
var_dump($quote);
mais c'est pas possible,

pourquoi t'utilises pas PDO ?

Matthieu
Invité n'ayant pas de compte PHPfrance

15 nov. 2011, 16:06

Merci de m'avoir éclairé.

Pour le PDO je l'ai toujours "utilisé" mais jamais codé... Donc je vais regarder si c'est dans mes compétences lol

J'imagine que ce site pourra me fournir tout ce dont j'ai besoin :)
Merci encore de m'avoir accordé un peu de temps.

Matthieu
Invité n'ayant pas de compte PHPfrance

15 nov. 2011, 16:11

Je ne trouve pas comment mettre Résolu, vu que je ne suis pas logué, je pense que se n'est pas possible ?

ps: si pour le PDO tu peux m'indiquer la voix s'il te plaît :oops:

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

15 nov. 2011, 16:15

pas possible de mettre résolu en invité.

a tu bien compris comment fonctionne le while ? c'est pareil pour PDO.

a ceci près que PDO te propose de retourner tous le jeux de résultat dans un tableau que tu pourra parcourir avec foreach
http://www.php.net/manual/fr/pdostatement.fetchall.php


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

Matthieu
Invité n'ayant pas de compte PHPfrance

15 nov. 2011, 16:17

Merci encore...

Bonne journée

ViPHP
ViPHP | 5462 Messages

15 nov. 2011, 16:26

pas possible de mettre résolu en invité.

a tu bien compris comment fonctionne le while ? c'est pareil pour PDO.

a ceci près que PDO te propose de retourner tous le jeux de résultat dans un tableau que tu pourra parcourir avec foreach
http://www.php.net/manual/fr/pdostatement.fetchall.php


@+
pas besoin PDOStatement c'est un Traversable donc tu peux direct faire un foreach dessus pas besoin de while