OVH Cloud OVH Cloud

Requete Mysql -> PHP

5 réponses
Avatar
dorcus
Salut tout le monde,

Un petit probleme qui me casse la tete :

J'ai 2 tables :

Table A :
id_a (primaire)
id_b (externe)
ord_a (int)
actif_a (enum)
debut_a (enum)
organisation (char)

Table B :
id_b (primaire)
nom_b (varchar)

Une requete qui fonctionne super sur Mysql (19 enregistrements) et qui
oublie le premier enregistrement quand je la fait en PHP (plus que 18)
:
$sql1 = "SELECT A.id_a, B.nom_b, A.ord_a ";
$sql1 .= "FROM A, B ";
$sql1 .= "WHERE A.organisation = '".$orga."' ";
$sql1 .= "AND A.id_b = B.id_b ";
$sql1 .= "AND A.actif_a = 'OUI' ";
$sql1 .= "AND A.debut_a = 'OUI' ";
$sql1 .= "ORDER BY A.ord_a";

$res1 = mysql_query($sql1,$link);

avec un
while ($ligne_o = mysql_fetch_array($res1)) { ... }
pour afficher les valeurs.

Je dois avoir de la c**tte dans les yeux mais je comprend plus rien...
au secour ;oP

Merci pour vos reponses avisées

5 réponses

Avatar
Pozzo
$res1 = mysql_query($sql1,$link);


Une différence 19/18 lignes, ce n'est pas possible donc...

Ajouter un echo $sql1; juste avant cette ligne... la copier/coller dans
phpMyAdmin : conclusion : 18 lignes également à mon avis :)

Ensuite comparer avec la requete initiale (celle qui retourne 19 lignes)
pour comprendre la différence.

Avatar
Antoine Dinimant

Une requete qui fonctionne super sur Mysql (19 enregistrements) et qui
oublie le premier enregistrement quand je la fait en PHP (plus que 18)


...
$sql1 .= "WHERE A.organisation = '".$orga."' ";


au passage, tu peux écrire
$sql1 .= "WHERE A.organisation = '$orga' ";
c'est plus facile à lire !

avec un
while ($ligne_o = mysql_fetch_array($res1)) { ... }
pour afficher les valeurs.


qq suggestions :

- inverse l'ordre de tri, pour savoir si c'est le premier élément ou cet
élément-là en particulier

- juste après mysql_query, affiche un mysql_numrows($res1) pour savoir
si c'est PHP ou MySQL qui perd ton élément

- juste avant ta boucle, fait un mysql_data_seek($res1, 0) pour replacer
le pointeur sur la première ligne ; si ça marche, c'est que tu as un
autre mysql_fetch_truc avant

Avatar
blob
Je ferais un
echo "<p>Nombre de lignes : ",mysqlnumrows($res1),"</p>;

pour avoir un accès direct au nombre de lignes retournées par le query,
et vérifier que l'erreur que tu constates ne vient pas de ta boucle.


BLob
Avatar
Damien
Salut tout le monde,
Salut !


(snip)

et derniers conseils, essaie :

print_r($res1);

et aussi de récupérer tes résultats avec mysql_fetch_assoc(). Juste pour
voir ;o)

Bon courage !
Damien

Avatar
dorcus
Merci pour vos reponses

Le sujet est resolu, j avais bel et bien du caca dans les yeux ;)

Je fesai un test avant la boucle du style :

if($res = mysql_fetch_truc($sql,$link){...

forcement ca passait le premier enregistrement...

Desole pour ce post inutile :o

Encore merci de votre participation.