PDO Exception SQLSTATE 42000 Syntax error 1064

Amadeous
Invité n'ayant pas de compte PHPfrance

19 août 2012, 16:41

Bonjour j'ai un souci qui est arrivé avec les dernières versions successives de MYSQL, avant ce système marchait très bien (il y'a quelques années).
Les données sont envoyées à partir d'un formulaire.
Si quelqu'un peut m'aider à y voir clair et me dire ce qui ne va pas, merci !

Voici mon code :

Code : Tout sélectionner

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 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 ' in C:\wamp\www\STAWAR\EnvoiArme.php on line 175 ( ! ) PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 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 'PRECISION, PORTEE, CADENCE, REACTIVITE, MOBILITE, STOCK, QU, QD, QP, QA, QV, D' at line 3 in C:\wamp\www\STAWAR\EnvoiArme.php on line 175

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>STAWAR SHERMAN WORLD CONQUEST</title>
       <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
	   <link rel="stylesheet" media="screen" type="text/css" title="Design" href="02.css"/>
   </head>
<body class="AjoutArme">

<?php try {$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; $bdd = new PDO('mysql:host=localhost;dbname=stawar', 'xxx', 'xxx', $pdo_options);
}catch (Exception $e) {die('Erreur : ' . $e->getMessage('Allô Houston nous avons un problème'));}?>



<p class="section" >APPARTENANCE ET DÉNOMINATION</p><p id="DT">

<label for="IDAT">IDAT : &nbsp;&nbsp;&nbsp;</label><input READONLY type="text" name="IDAT" id="sortie" 
value="<?php echo htmlspecialchars($_POST['IDAT']) ?>" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<label for="NATION">NATION : &nbsp;&nbsp;&nbsp;</label><input READONLY type="text" name="NATION" id="sortie" 
value="<?php echo htmlspecialchars($_POST['NATION']) ?>" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<label for="IDA">IDA : &nbsp;&nbsp;&nbsp;</label><input READONLY type="text" name="IDA" id="sortie" 
value="<?php echo htmlspecialchars($_POST['IDA']) ?>" />
</br></br>
<label for="FABRIQUANT">FABRIQUANT : &nbsp;&nbsp;&nbsp;</label><input READONLY type="text" name="FABRIQUANT" id="sortie" 
value="<?php echo htmlspecialchars($_POST['FABRIQUANT']) ?>" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<label for="TYPE">TYPE D'ARME : &nbsp;&nbsp;&nbsp;</label><input READONLY type="text" name="TYPE" id="sortie" 
value="<?php echo htmlspecialchars($_POST['TYPE']) ?>" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<label for="NOM">NOM :&nbsp;&nbsp;&nbsp;</label><input READONLY type="text" name="NOM" id="sortie" 
value="<?php echo htmlspecialchars($_POST['NOM']) ?>" />
</p>



<p class="section" >DONNÉES TECHNIQUES</p><p id="DT">

<label for="CALIBRE">CALIBRE (mm):&nbsp;&nbsp;&nbsp;</label><input READONLY type="text" name="CALIBRE" id="sortie" 
value="<?php echo htmlspecialchars($_POST['CALIBRE']) ?>" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<label for="MUNITION">MUNITION:&nbsp;&nbsp;&nbsp;</label><input READONLY type="text" name="MUNITION" id="sortie" 
value="<?php echo htmlspecialchars($_POST['MUNITION']) ?>" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<label for="STABILISATEUR">STABILISATEUR :&nbsp;&nbsp;&nbsp;</label><input READONLY type="text" name="STABILISATEUR" id="sortie" 
value="<?php echo htmlspecialchars($_POST['STABILISATEUR']) ?>" />
<br/><br/>
<label for="POIDS">POIDS (kg):&nbsp;&nbsp;&nbsp;</label><input READONLY type="text" name="POIDS" id="sortie" 
value="<?php echo htmlspecialchars($_POST['POIDS']) ?>" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<label for="MATERIAU">MATÉRIAU :&nbsp;&nbsp;&nbsp;</label><input READONLY type="text" name="MATERIAU" id="sortie" 
value="<?php echo htmlspecialchars($_POST['MATERIAU']) ?>" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<label for="VISEE">SYSTÈME DE VISÉE :&nbsp;&nbsp;&nbsp;</label><input READONLY type="text" name="VISEE" id="sortie" 
value="<?php echo htmlspecialchars($_POST['VISEE']) ?>" />
<br/><br/>
<label for="ERGONOMIE">ERGONOMIE :&nbsp;&nbsp;&nbsp;</label><input READONLY type="text" name="ERGONOMIE" id="sortie" 
value="<?php echo htmlspecialchars($_POST['ERGONOMIE']) ?>" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<label value="TECHNOLOGIES">TECHNOLOGIES :&nbsp;&nbsp;&nbsp;</label><input READONLY type="text" name="TECHNOLOGIES" id="sortie" 
value="<?php echo htmlspecialchars($_POST['TECHNOLOGIES']) ?>" />
</p>



<p class="section" >DONNÉES EXPLOITABLES</p><p id="DU">

<label for="PUISSANCE">PUISSANCE :&nbsp;&nbsp;&nbsp;</label><input READONLY type="text" name="PUISSANCE" id="sortie" 
value="<?php echo htmlspecialchars($_POST['PUISSANCE']) ?>" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<label for="PRECISION">PRÉCISION :&nbsp;&nbsp;&nbsp;</label><input READONLY type="text" name="PRECISION" id="sortie" 
value="<?php echo htmlspecialchars($_POST['PRECISION']) ?>" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<label for="PORTEE">PORTÉE :&nbsp;&nbsp;&nbsp;</label><input READONLY type="text" name="PORTEE" id="sortie" 
value="<?php echo htmlspecialchars($_POST['PORTEE']) ?>" />
<br/><br/>
<label for="CADENCE">CADENCE :&nbsp;&nbsp;&nbsp;</label><input READONLY type="text" name="CADENCE" id="sortie" 
value="<?php echo htmlspecialchars($_POST['CADENCE']) ?>" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<label for="REACTIVITE">RÉACTIVITÉ :&nbsp;&nbsp;&nbsp;</label><input READONLY type="text" name="REACTIVITE" id="sortie" 
value="<?php echo htmlspecialchars($_POST['REACTIVITE']) ?>" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<label for="MOBILITE">MOBILITÉ :&nbsp;&nbsp;&nbsp;</label><input READONLY type="text" name="MOBILITE" id="sortie" 
value="<?php echo htmlspecialchars($_POST['MOBILITE']) ?>" />
</p>




<p class="section" >QUANTITÉS ET DATES</p><p id="DT">

<label for="STOCK">STOCK :&nbsp;&nbsp;&nbsp;</label><input READONLY type="text" name="STOCK" id="sortie" 
value="<?php echo htmlspecialchars($_POST['STOCK']) ?>" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<label for="QU">QUANTITÉ UTILISÉE :&nbsp;&nbsp;&nbsp;</label><input READONLY type="text" name="QU" id="sortie" 
value="<?php echo htmlspecialchars($_POST['QU']) ?>" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<label for="QD">QUANTITÉ DÉTRUITE :&nbsp;&nbsp;&nbsp;</label><input READONLY type="text" name="QD" id="sortie" 
value="<?php echo htmlspecialchars($_POST['QD']) ?>" />
<br/><br/>
<label for="QP">QUANTITÉ PRODUITE :&nbsp;&nbsp;&nbsp;</label><input READONLY type="text" name="QP" id="sortie" 
value="<?php echo htmlspecialchars($_POST['QP']) ?>" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<label for="QA">QUANTITÉ ACHETÉE :&nbsp;&nbsp;&nbsp;</label><input READONLY type="text" name="QA" id="sortie" 
value="<?php echo htmlspecialchars($_POST['QA']) ?>" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<label for="QV">QUANTITÉ VENDUE :&nbsp;&nbsp;&nbsp;</label><input READONLY type="text" name="QV" id="sortie" 
value="<?php echo htmlspecialchars($_POST['QV']) ?>" />
<br/><br/>
<label for="DC">DATE DE CRÉATION :&nbsp;&nbsp;&nbsp;</label><input READONLY type="text" name="DC" id="sortie" 
value="<?php echo htmlspecialchars($_POST['DC']) ?>" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<label for="DFP">DATE DE FIN DE PRODUCTION :&nbsp;&nbsp;&nbsp;</label><input READONLY type="text" name="DFP" id="sortie" 
value="<?php echo htmlspecialchars($_POST['DFP']) ?>" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<label for="DA">DATE D'ACHAT :&nbsp;&nbsp;&nbsp;</label><input READONLY type="text" name="DA" id="sortie" 
value="<?php echo htmlspecialchars($_POST['DA']) ?>" />
<br/><br/>
<label for="DU">DATE D'UTILISATION EN COMBAT :&nbsp;&nbsp;&nbsp;</label><input READONLY type="text" name="DU" id="sortie" 
value="<?php echo htmlspecialchars($_POST['DU']) ?>" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<label for="DD">DATE DE DISPARITION :&nbsp;&nbsp;&nbsp;</label><input READONLY type="text" name="DD" id="sortie" 
value="<?php echo htmlspecialchars($_POST['DD']) ?>" />
</p>


<?php 
$req = $bdd->prepare('INSERT INTO armes( ID, IDAT, NATION, IDA, FABRIQUANT, TYPE, NOM, 
CALIBRE, MUNITION, STABILISATEUR, POIDS, MATERIAU, VISEE, ERGONOMIE, TECHNOLOGIES,
 PUISSANCE, PRECISION, PORTEE, CADENCE, REACTIVITE, MOBILITE,
 STOCK, QU, QD, QP, QA, QV, DC, DFP, DA, DU, DD)
 VALUES( "", :IDAT2, :NATION2, :IDA2, :FABRIQUANT2, :TYPE2, :NOM2,
 :CALIBRE2, :MUNITION2, :STABILISATEUR2, :POIDS2, :MATERIAU2, :VISEE2, :ERGONOMIE2, :TECHNOLOGIES2,
 :PUISSANCE2, :PRECISION2, :PORTEE2, :CADENCE2, :REACTIVITE2, :MOBILITE2,
 :STOCK2, :QU2, :QD2, :QP2, :QA2, :QV2, :DC2, :DFP2, :DA2, :DU2, :DD2)');
 
$req->execute(array(

'IDAT2' => $_POST['IDAT'],
'NATION2' => $_POST['NATION'],
'IDA2' => $_POST['IDA'],
'FABRIQUANT2' => $_POST['FABRIQUANT'],
'TYPE2' => $_POST['TYPE'],
'NOM2' => $_POST['NOM'],

'CALIBRE2' => $_POST['CALIBRE'],
'MUNITION2' => $_POST['MUNITION'],
'STABILISATEUR2' => $_POST['STABILISATEUR'],
'POIDS2' => $_POST['POIDS'],
'MATERIAU2' => $_POST['MATERIAU'],
'VISEE2' => $_POST['VISEE'],
'ERGONOMIE2' => $_POST['ERGONOMIE'],
'TECHNOLOGIES2' => $_POST['TECHNOLOGIES'],

'PUISSANCE2' => $_POST['PUISSANCE'],
'PRECISION2' => $_POST['PRECISION'],
'PORTEE2' => $_POST['PORTEE'],
'CADENCE2' => $_POST['CADENCE'],
'REACTIVITE2' => $_POST['REACTIVITE'],
'MOBILITE2' => $_POST['MOBILITE'],

'STOCK2' => $_POST['STOCK'],
'QU2' => $_POST['QU'],
'QD2' => $_POST['QD'],
'QP2' => $_POST['QP'],
'QA2' => $_POST['QA'],
'QV2' => $_POST['QV'],
'DC2' => $_POST['DC'],
'DFP2' => $_POST['DFP'],
'DA2' => $_POST['DA'],
'DU2' => $_POST['DU'],
'DD2' => $_POST['DD']

));?>



</br></br></br></br><br/>
<p id="DE">
<a href="AjoutArme.php"><input type=button class="verifier" value="Nouvelle Arme"></a>
</p>

<p class=copyright>© STAWAR ©</p>

</body>
</html>

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

19 août 2012, 18:27

salut,

la requete SQL est foireuse, regarde ce que tu fournis et comme l’interprète PDO.

au besoin test ta requete avec un client SQL.


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

Amadeous
Invité n'ayant pas de compte PHPfrance

19 août 2012, 20:00

Merci,

Après le test, j'ai vu qu'il interprétait mal "PRECISION", que j'ai modifié, mais le problème vient qu'il fait un échange de parenthèse.
La première au lieu de se refermer à la fin se termine après "DD" et la seconde se referme à la fin au lieu d'après "DD".
Quand j'enlève les apostrophes devant INSERT et à la fin, il interprète correctement les parenthèses, mais la requête ne fonctionne pas non plus.

Comment faire pour qu'il interprète correctement l'ordre des parenthèses?
<?php
$req = $bdd->prepare   (       'INSERT INTO armes           (            ID, IDAT, NATION, IDA, FABRIQUANT, TYPE, NOM,
CALIBRE, MUNITION, STABILISATEUR, POIDS, MATERIAU, VISEE, ERGONOMIE, TECHNOLOGIES,
 PUISSANCE, PRECIS, PORTEE, CADENCE, REACTIVITE, MOBILITE,
 STOCK, QU, QD, QP, QA, QV, DC, DFP, DA, DU, DD              )
 VALUES( "", :IDAT2, :NATION2, :IDA2, :FABRIQUANT2, :TYPE2, :NOM2,
 :CALIBRE2, :MUNITION2, :STABILISATEUR2, :POIDS2, :MATERIAU2, :VISEE2, :ERGONOMIE2, :TECHNOLOGIES2,
 :PUISSANCE2, :PRECIS2, :PORTEE2, :CADENCE2, :REACTIVITE2, :MOBILITE2,
 :STOCK2, :QU2, :QD2, :QP2, :QA2, :QV2, :DC2, :DFP2, :DA2, :DU2, :DD2)'           )               ;

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

19 août 2012, 20:21

mysql ne modifie pas les parenthèses !

tu utilise des mots réservés comme nom de chemps tes soucis sont donc normaux.

par exemple type est aussi un mot réservé, donc c'est ton second soucis :)


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

Amadeous
Invité n'ayant pas de compte PHPfrance

19 août 2012, 21:27

Merci, j'avais pourtant épluché la liste des mots réservés, il devait être tellement gros que je l'ai pas vu :) (3ème et dernier mot réservé trouvé).
De longs jours de découragement se terminent grâce à ton aide précieuse, merci encore "Moogli".

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

19 août 2012, 22:04

essai un ide qui va te coloriser la syntaxe du code tu trouvera plus rapidement les mots clefs que tu ne connais pas ;)



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