Erreur PHP requete sql

macances2
Invité n'ayant pas de compte PHPfrance

27 mai 2011, 15:19

Bonjour à tous,

J'ai un petit souçit de codage pour un site quand je fait la requête suivante et que photo ne contient que des chiffres (ex : 1720 , 3130) la requête se passe bien, par contre si je mets une lettre j'ai ce message d'erreur (ex 1720c, HP28):

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:\Program Files\EasyPHP5.2.10\www\gestioncartouche\Demande_de_cartouche2.php on line 151

merci de votre aide


//requête SQL:
$sql = "SELECT * FROM photo_imprimante WHERE reference = ".$id;

//exécution de la requête:
$requete = mysql_query( $sql, $cnx ) ;

//affichage des données:
if( $result = mysql_fetch_object( $requete ) )
{
?>

<img width="130" height="130" src="<?php echo($result->photo) ;?>" /></a>



<?php
}//fin if
?>

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

27 mai 2011, 15:24

salut,

une chaine de caractère DOIT être entourée de ', donc mysql ne comprend ce que tu lui demande avec 18f15 ;)

pour cela tu peut faire un test en php avec is_numeric et faire ta requête seulement si le test est bon ;)

je te conseil aussi la fonction mysql_real_escape_string pour protéger tes données.


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

Mammouth du PHP | 672 Messages

27 mai 2011, 15:26

Bonjour.

1. Merci d'utiliser les balises de code, c'est plus lisible...

2. Pour ton problème.
Neuf fois sur dix, ce message veut dire que ta requête est fausse. Du coup, le résultat de mysql_query est FALSE.
Et quand tu essaies de faire un fetch sur FALSE, forcément PHP râle...
Première chose à faire : afficher la requête, et la passer directement, par exemple dans phpMySQL.
Deuxième chose : les instructios mysql_* renvoient FALSE en cas d'erreur.
=> Dans ce cas, affiche rle message d'erreur.
Evidemment, c'ets juste le temps de débugger :mrgreen:
//requête SQL:
$sql = "SELECT * FROM photo_imprimante WHERE reference = ".$id;
echo "Requete : $sql";
//exécution de la requête:
$requete = mysql_query( $sql, $cnx ) or die ("erreur de requete :".mysql_error() );

//affichage des données:
if( $result = mysql_fetch_object( $requete ) )
{
?>

<img width="130" height="130" src="<?php echo($result->photo) ;?>" /></a>



<?php
}//fin if
?>

Eléphant du PHP | 80 Messages

27 mai 2011, 16:06

Idem que Moogli, si dans ta bdd référence est en type Integer, decimal etc, pas besoin de quote, mais interdiction de lettres et autres caractères.
Donc ça donnerait bien :
$sql = "SELECT * FROM photo_imprimante WHERE reference = ".$id;
Mais si il peut y avoir des lettres dans reference, alors passe la en char, varchar, ou comme ça te convient. Ce qui donnerait :
$sql = "SELECT * FROM photo_imprimante WHERE reference ='".$id. "'";
Si je ne me trompe pas ...
En informatique, lorsqu'il y a un bug, le souci est toujours entre la chaise et le clavier.

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

27 mai 2011, 19:47

tu ne te trompe pas, pour le cas où il s'agit d'une chaine de caractère, certain sgbd moins sympa que mysql te râlerais dessus si tu passe un entier entre ' (erreur de type).

donc pour faire bien => is_numeric

ceci dit 3 messages pour dire la même chose ..............

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