requet qui marche sur PHPmyAdmin et qui bugge dans un script

Mammouth du PHP | 693 Messages

27 août 2007, 15:23

Bonjour,

J'ai un problème avec une requete

Code : Tout sélectionner

SELECT nom,duche FROM conseil WHERE grade='regnant' ORDER BY duche
Lorsque je la tape dans la console de PHPmyAdmin, elle fonctionnne parfaitement. Mais quand je l'inclue dans un script, elle ne retourne rien, et sans erreurs.

Voici mon code
	$requet="SELECT nom,duche FROM conseil WHERE grade='regnant' ORDER BY duche";
	print($requet);
	$result=mysql_query($requet) or die($requet.'<br>'.mysql_error());
	print(mysql_num_rows($result));
ce qui me donne :

Code : Tout sélectionner

SELECT nom,duche FROM conseil WHERE grade='regnant' ORDER BY duche0
au passage voici ma table

Code : Tout sélectionner

CREATE TABLE `conseil` ( `nom` varchar(30) NOT NULL, `grade` varchar(10) NOT NULL, `duche` varchar(30) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

ViPHP
ViPHP | 2287 Messages

27 août 2007, 15:36

Question idiote peut-être, mais es-tu connecté à mysql avant d'envoyer ta requête ? Car on n'en voit aucune trace dans le code que tu as posté.
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Mammouth du PHP | 693 Messages

27 août 2007, 15:37

OUi, je suis connecté plus haut dans le code.

Et il me semble que j'aurai eu un message d'erreur dans ce cas.

ViPHP
ViPHP | 5924 Messages

27 août 2007, 18:17

Et que te renvoies un mysql_fetch_array() (ou fonction équivalente) ? Parce que là tu n'utilises que mysql_num_rows()…

Mammouth du PHP | 693 Messages

27 août 2007, 18:59

Au départ je faisait une boucle sur mysql_fetch_assoc(), mais la boucle n'avait aucune occurence.

mysql_num_rows() était pour tester.

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

27 août 2007, 19:12

Hmm, change ton système de rapport d'erreur pour voir ? Est-ce que le "or" aurait précédence sur l'opérateur d'assignation ?
$requet = "SELECT nom,duche FROM conseil WHERE grade='regnant' ORDER BY duche"; 
$result = mysql_query($requet);

if (!$result)
{
	die('<pre>' . $requet . '</pre><b>' . mysql_error() . '</b>');
}
Tant que tu y es, tu devrais aussi prendre l'habitude de passer la connexion à la base quand tu utilises les fonctions MySQL (second paramètre de mysql_query()).

ViPHP
ViPHP | 5924 Messages

27 août 2007, 19:14

Euh, Hubert, on utilise tout le temps des or die(), ca a toujours marché, je ne vois pas pourquoi exceptionnellement, ca ne fonctionnerait pas…

Mammouth du PHP | 693 Messages

27 août 2007, 19:19

bon...

En fait, je m'étais planté dans ma configuration, et je me connectais sur une autre base de donnée, qui avait la même table...

J'ai honte :oops:

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

27 août 2007, 19:29

on utilise tout le temps des or die(), ca a toujours marché, je ne vois pas pourquoi exceptionnellement, ca ne fonctionnerait pas…
Je n'ai jamais utilisé "or die()" donc je ne peux pas dire. Une chose dont je suis sûr, c'est que je ne connais pas la table de précédence par cœur donc je recommande généralement d'éviter les constructions où elle est ouverte à interprétation. Dans l'exemple plus haut, je ne savais pas (avant d'aller vérifier dans le manuel) s'il allait être interprété comme
($result=mysql_query($requet)) or die();
ou
$result=(mysql_query($requet) or die());
En gros, le raisonnement est : retirons tout ce qui n'est pas blindé, et après on pourra discuter :lol:

ViPHP
ViPHP | 5924 Messages

27 août 2007, 19:37

Moi non plus, je ne l'utilise pas, mais c'est une structure plutôt connue. D'ailleurs, on signale systématiquement de l'utiliser (même si nous même y préférons d'autres structures).

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

27 août 2007, 20:34

D'ailleurs, on signale systématiquement de l'utiliser
Oui, et c'est quelque chose que j'essaie d'inverser parce que c'est l'une des construction les plus confuses qu'il m'ait été donné de voir. Je me rappelle à l'époque où j'ai découvert PHP ne pas comprendre comment "or die()" pouvait marcher, et j'avais du mal à m'y faire. Jusqu'à ce que je me rendre compte qu'on pouvait le faire différemment, et ça m'a totalement aidé. Enfin, tout ça pour dire qu'on passe notre temps à dire aux gens d'écrire des scripts clairs et lisibles et en même temps on leur sert du "or die()" à chaque post...

Code : Tout sélectionner

a = b or c;