[RESOLU] Warning: Warning: mysql_num_fields() et mysql_fetch_row()

Eléphanteau du PHP | 15 Messages

10 oct. 2012, 08:04

Bonjour à tous

J'ai un code ou il me trouve 2 erreurs :

La première : Warning: mysql_num_fields() expects parameter 1 to be resource, boolean
La deuxième : Warning: mysql_fetch_row() expects parameter 1 to be resource, boolean

En pèce le page .php

Merci pour votre aide
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

ViPHP
ViPHP | 2577 Messages

10 oct. 2012, 08:30

Il y a surement une erreur lors du mysql-query().
Le contrôle de la bonne exécution de la requete via mysql_error()/mysql_errno() peut t'aider.

Eléphanteau du PHP | 15 Messages

10 oct. 2012, 08:52

Merci

mais je dois le mettre où dans le code mysql_error()

ViPHP
ViPHP | 2577 Messages

10 oct. 2012, 09:05

après le mysql_query() :
if (mysql_errno() <> 0) affichage de messages (ordre sql, mysql_error()...) et arrêt du traitement

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

10 oct. 2012, 09:07

salut,

par exemple
<?php
// Ne pas oublier la connexion et la selection de base avant ;)
$sql = 'select truc from machin';
$ret = mysql_query($sql);
if ($ret === false) 
    echo '<p class="erreurSQL">Erreur SQL :<br />'.mysql_error().'<br />Avec la requête : '.$sql.'</p>';
}
else {
    // Traitement de la requête
    mysql_free_result($ret);
}
?>

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

ViPHP
ViPHP | 2577 Messages

10 oct. 2012, 09:20

Personnellement, je préfère me baser sur mysql_errno() car il m'arrive de traiter certains codes erreurs comme les "duplicate key" que je contrôle par la requete de maj pour éviter un select en plus.

Mais c'est une question d'habitude et de préjuger.

Eléphanteau du PHP | 15 Messages

10 oct. 2012, 09:24

Merci pour vos réponse

mais cela ne fonctionne pas

mysql_errno() doit être où ?

pouvez vous regarde le fichier joint AO - Copie (2)

Merci

ViPHP
ViPHP | 2577 Messages

10 oct. 2012, 09:46

Ajoute la fonction :
<?PHP
function db_query($SQL,$link) {
   $result = mysql_query($SQL, $link) ;
   if ($result===false) {
       echo mysql_errno(),' : ',mysql_error(),'<br>',$SQL;
       exit;
   }
   return $result;
}
?>
Et remplace les mysql_query par db_query dans le script.

Tu utilisaras au choix :
($result===false) ou ($mysql_errno()<>0) dans la fonction

Eléphanteau du PHP | 15 Messages

10 oct. 2012, 10:03

Peux tu me mettre ta fonction dans mon fichier


car je n'y arrive pas


Merci d'avance

ViPHP
ViPHP | 2577 Messages

10 oct. 2012, 10:49

Qu'est ce qui t'empêche de mettre la fonction en début de ton fichier et de remplacer mysql_query par db_query dans le reste du fichier ?

Le problème à la base est que l'appelle à la fonction mysql_query() peut ne pas fonctionner pour diverse raisons : serveur qui ne fonctionne pas, erreur dans le code, modification de la base...
Il faut donc vérifier que la fonction s'est bien exécuté tout de suite après l'appel et la fonction mysql_errno() permet cela ainsi que la valeur retournée par la fonction. C'est valable pour pas mal de fonction comme l'ouverture d'un répertoire, l'ouverture d'un fichier...

Eléphanteau du PHP | 15 Messages

10 oct. 2012, 11:11

j'ai mis la fonction au début et remplacer mysql_query par db_query dans le reste du fichier

Mais ça me marche pas


Merci

ViPHP
ViPHP | 2577 Messages

10 oct. 2012, 11:32

...
Mais ça me marche pas
...
Ce n'est pas suffisant comme information pour corriger ton problème.
D'ailleurs, la modification que l'on t'as proposé avait pour but d'obtenir un message d'erreur pour corrigé en fonction de ce message.