Problème d'argument dans ma requête ?

Dacobah Messages postés 272 Statut Membre -  
Dalida Messages postés 7114 Statut Contributeur -
Bonjour à tous et à toutes,

je bloque une fonction qui permet d'exécuter des requêtes. Je vous montre mon code (pourtant pas si long) car mieux vaut quelques lignes de code qu'un long discours ...

Dans le fichier fonctions.php, nous avons :

<?php

function connexion($serveur, $utilisateur, $motdepasse){
mysql_pconnect($serveur, $utilisateur, $motdepasse) or afficheMessageErreur("Connexion impossible !");
}

function afficheMessageErreur($message){
die ("<strong><u>$message</u></strong>");
}

function siExisteRetourne($result, $message){
if ($result){
return $result;
}else{
afficheMessageErreur($message);
}
}

function executerRequete($sql, $database){
$result = mysql_db_query($database, mysql_real_escape_string($sql));
siExisteRetourne($result, "Erreur durant l'exécution de la requête !");
}

function assoc($result){
$result = mysql_fetch_assoc($result);
siExisteRetourne($result, "Erreur dans la génération du tableau associatif !");
}

?>

Et ... dans le fichier index.php, nous avons :

<?php

require_once("fonctions.php");
require_once("conf.php"); // fichier qui contient mes constantes SERVEUR, NOM, MDP, BASE (définies avec la fonction define)

connexion(SERVEUR, NOM, MDP);
$a = executerRequete("SELECT * FROM admin", BASE);
$b = mysql_fetch_assoc($a); <----------------------------------------- Ligne où php me trouve une erreur
?>

Et j'obtiens donc un message d'erreur : Warning: mysql_fetch_assoc is not a valid MySQL result resource (à la ligne montrée par une flèche). D'après ce que j'ai compris, mon $a n'est pas un argument valide. Pourtant en regardant la documentation de php.net, ils précisent que cet argument doit être la ressource de résultat qui vient d'être évaluée et que ce résultat vient de l'appel à la fonction mysql_query(). J'ai donc essayé de remplacer mysql_db_query() par mysql_query mais j'obtiens la même chose.
Des idées ? Moi je bloque ...
Merci d'avance pour vos réponses.

4 réponses

Dalida Messages postés 7114 Statut Contributeur 923
 
salut,

pour débuguer, il faut essayer de tracer l'erreur pas tes propres moyens en retournant les variables clés :
modifies ton code comme ça :
connexion(SERVEUR, NOM, MDP);
$a = executerRequete("SELECT * FROM admin", BASE);
echo( "#SELECT * FROM admin#" );
print_r( $a );
$b = mysql_fetch_assoc($a); 

à l'affichage tu récupère la requête qui est entre les '#' et tu la testes directement dans PHPMyAdmin.
et tu regarde ce qu'il t'imprime pour '$a', si c'est un objet, quel est son type.

c'est un peu crado comme méthode mais ça devrait te permettre d'avancer.
1
Dacobah Messages postés 272 Statut Membre 74
 
Ok, j'ai testé ton idée de débuggage Dalida, et j'obtiens bien un enregistrement en effectuant la requête dans PHPMyAdmin. Alors que print_r($a) qui devrait me renvoyer un tableau ne me renvoie rien. C'est donc sans doûte executerRequete qui ne marche pas.

Je reste bloqué malgré tout. Peut-etre mysql_db_query mal utilisée ? Je continue mon débugage mais reste ouvert à toute solution / proposition.
0
Dalida Messages postés 7114 Statut Contributeur 923
 
print_r($a) qui devrait me renvoyer un tableau
non il devrait renvoyer une ressource, mais en tout cas il ne devrait pas renvoyer du vide !

essaie
function executerRequete($sql, $database){
$result = mysql_db_query($database, mysql_real_escape_string($sql));
print_r( $result );
siExisteRetourne($result, "Erreur durant l'exécution de la requête !");
} 

puis essaie avec :
$result = mysql_query($database, $sql);
$result = mysql_query(mysql_real_escape_string($sql));
$result = mysql_($database, $sql);
$result = mysql_($sql);<
1
Dalida Messages postés 7114 Statut Contributeur 923
 
oui c'est le 'mysql_real_escape_string()' qui ne doit pas être utilisée sur la requête mais sur les variables à y insérer.

dans ton cas elle est inutile puisque tu maîtrises le contenu de la requête.
1
Dacobah Messages postés 272 Statut Membre 74
 
Oui j'ai confondu print_r et print_a.

Autrement, tu avais raison c'est mysql_real_escape_string() qui n'est pas nécessaire et il y avait également ma fonction siExisteRetourne() qui n'était pas bonne.
J'ai aussi essayé de voir ce que donnait un var_dump sur ma variable.

Bref, problème résolu !
Merci beaucoup pour le temps que tu as consacré à mon problème.
0
Dalida Messages postés 7114 Statut Contributeur 923
 
oula, t'as tout repeint en jaune ?!
-:oD

si la prochaine fois tu es plus à l'aise pour traquer le cafard, ce fil aura été tout à fait utile !
-;o)

bon courage pour la suite et à plus !
0