Erreur MySQL

Résolu
Signaler
Messages postés
392
Date d'inscription
mercredi 24 novembre 2004
Statut
Membre
Dernière intervention
26 septembre 2009
-
Messages postés
694
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
8 janvier 2014
-
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

Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
4
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.
Messages postés
694
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
8 janvier 2014
16
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());

}
Messages postés
694
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
8 janvier 2014
16
le mysql_num_rows() est en trop...
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
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>
Messages postés
392
Date d'inscription
mercredi 24 novembre 2004
Statut
Membre
Dernière intervention
26 septembre 2009

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à !
Messages postés
694
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
8 janvier 2014
16
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.