Erreur MySQL

Résolu
cs_Arnauti Messages postés 392 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 26 septembre 2009 - 18 févr. 2006 à 20:31
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 - 19 févr. 2006 à 12:41
Bonjour a tous, je veux insérer quelque chose dans ma base de donnée mais il y a un bug et je ne comprends pas du tout pourquoi ca ne marche pas. Voici mon code :

<hr size="2" width="100%">$req = mysql_query('INSERT INTO ressources (pseudo, fer, bois, pierre, or, nourriture, paysans) VALUES ("'.$_POST['pseudo'].'", "1000", "1000", "1000", "100", "100", "10") ') or die(mysql_error()); <hr size="2" width="100%">La connection a la base a déjà été faite.
Voici l'erreur affiché :

<hr size="2" width="100%">You have an error in your SQL syntax; check the
manual that corresponds to your MySQL server version for the right
syntax to use near 'or, nourriture, paysans) VALUES ("Pseudo", "1000",
"1000", "1000", "100", "100", "' at line 1
<hr size="2" width="100%">J'espère que vous allez pouvoir m'aider ...
A++
<hr size="2" width="100%">Si un des membres à poster une reponse qui convient, accepter là !

6 réponses

FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
19 févr. 2006 à 02:58
Nan mais c'est tout con en faite :D
Ca ne vient pas de ses variables, ni des '' ou des "". Mais d'une chose plus subtil.

Analysons le code d'erreur :

"You have
an error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near 'or, nourriture,
paysans)"

near or. L'erreur est ici. Et oui, il y a ambiguité dans ta requète SQL. "or" sans '' indique ici une condition en SQL et non un nom de champ. Il faut donc soit que tu renommes ton champ, soit je crois en lui mettant des '' mais j'en suis moins sur.

Voila où est l'erreur. J'avais eu le même problème sur un autre nom de champs... mais je sais plus lequel.
3
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 18
18 févr. 2006 à 21:50
Je ne suis pas certain que la syntaxe sql accepte les guillemets
doubles comme delimiteurs de chaine, d'autre part les valeurs
numériques n'ont pas besoin d'être encadrées.



Essayes :

// Verifier que la variable post est réellement la

if ( isset ($_POST['Pseudo'] && !is_null($_POST['Pseudo'] ) {

$Requete = sprintf ("INSERT INTO ressources (pseudo,
fer, bois, pierre, or, nourriture, paysans) VALUES ('%s', 1000, 1000,
1000, 100, 100, 10)", $_POST['Pseudo']);

if ( ( $Resultat = mysql_query($Requete)) && mysql_num_rows($Resultat) ) {



// Faire le job

Blabla();



} else die ("Pb insertion : ".mysql_error());

}
0
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 18
18 févr. 2006 à 21:51
le mysql_num_rows() est en trop...
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 9
18 févr. 2006 à 23:55
Salut,

$req =
mysql_query('INSERT INTO ressources VALUES ("'.$_POST['pseudo'].'",1000,1000,1000,100,100,10)') or die(mysql_error());

si tu remplaces la requête par ça et que tu fais un echo de ça :

'INSERT INTO ressources VALUES ("'.$_POST['pseudo'].'",1000,1000,1000,100,100,10)'

ça te donne quoi ?
<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Arnauti Messages postés 392 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 26 septembre 2009
19 févr. 2006 à 09:53
Merci, ca marche, il fallait renommer le champ.
A++
<hr size="2" width="100%">Si un des membres à poster une reponse qui convient, accepter là !
0
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 18
19 févr. 2006 à 12:41
CREATE TABLE `or` (

`or` INT NOT NULL,

`and` INT NOT NULL ,

`null` INT NOT NULL

);



insert into `or` (`or`, `and`, `null`) values (1,2,3);



create table `create` (

`create` INT,

`select` INT

);



insert into `create` (`create`, `select`) values (1, 2);



Il faut effectivement proteger les noms de champs ou de table qui utilise des mots reserves, mais ca reste possible.
0