ERREUR : SQLSTATE[42000]

jordanus47
Invité n'ayant pas de compte PHPfrance

26 oct. 2011, 02:17

Bonjour,

je sais que le sujet à été évoqué maintes fois, et ce n'est qu'après d'intensives, et surtout vaines recherches, que je me décide à poster.

J'ai un script PHP que je n'arrive pas à faire fonctionner, et qui me renvoie toujours la même erreur, celle ci :
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 'Désignation, Référence) VALUES('BarbGéant' at line 1' in /opt/lampp/htdocs/pricecompare/index.php:36 Stack trace: #0 /opt/lampp/htdocs/pricecompare/index.php(36): PDOStatement->execute(Array) #1 {main} thrown in /opt/lampp/htdocs/pricecompare/index.php on line 36
Et je n'arrive pas à comprendre pourquoi.

La partie du code PHP qui pose (apparament) problème est celle-ci :
$designation = $Products->Designation;
$reference = $Products->Reference;
	
   $reqreponse=$bdd->prepare('INSERT INTO Produits(Désignation, Référence) VALUES(:designation, :reference)') or die("Erreur MySQL : ".mysql_error());
   $reqreponse->execute(array(
   			'designation'=>$designation,   							
   			'reference'=>$reference
   			));	
   $reqreponse->closeCursor();

C'est depuis hier que je suis dessus, donc peut-être la fatigue ne m'a pas aidé, mais la, je flanche.
Si vous avez besoin de plus d'informations, n'hésitez pas !

Merci

Mammouth du PHP | 19672 Messages

26 oct. 2011, 07:01

Tu as mis des paramètres avec « : » dans la requête, mais tu n'as pas mis ces « : » dans les index du tableau des paramètres.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

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

26 oct. 2011, 09:53

je n'est pas testé, mais a priori, ça ne pose pas de soucis.

Par contre je me demande si les accents n'en pose pas ?

A tu essayé cette requête directement avec un client mysql ? (s'il s'agit bien de mysql ;) )

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

Mammouth du PHP | 19672 Messages

26 oct. 2011, 09:59

Par contre je me demande si les accents n'en pose pas ?
Bien vu, je n'avais pas relevé ce détail.

Il ne faut effectivement pas nommer des colonne avec des caractères spéciaux. Ça fonctionnerait peut-être sous Windows quoique j'émette malgré tout quelques réserves là-dessus, mais sous Linux j'ai des doutes encore plus importants. Et si jamais il y a des incongruités d'encodage qui se mettent de la partie, ça ne va sûrement pas arranger les choses.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
xTG
ViPHP | 7331 Messages

26 oct. 2011, 11:03

Hormis les soucis d'encodage cela ne poserai pas de problème si les noms étaient protégés et ce quel que soit l'OS normalement. :)
SELECT `nom_de_colonne_protégé` FROM `table_accentuée`

Mammouth du PHP | 19672 Messages

26 oct. 2011, 11:07

Mouais, ça reste quand même une mauvaise pratique :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
xTG
ViPHP | 7331 Messages

26 oct. 2011, 11:28

Est-ce une mauvaise pratique que de toujours bazarder notre si belle langue durant notre travail ?
Auquel cas commenter un code en français le serait aussi si on hyperbole !

Hum quoi ? Ah hum...
Bon ok c'est une mauvaise pratique que d'insérer des caractères non supportés par l'anglais dans un logiciel anglais. :(

Mammouth du PHP | 19672 Messages

26 oct. 2011, 11:35

Est-ce une mauvaise pratique que de toujours bazarder notre si belle langue durant notre travail ?
Auquel cas commenter un code en français le serait aussi si on hyperbole !

Hum quoi ? Ah hum...
Bon ok c'est une mauvaise pratique que d'insérer des caractères non supportés par l'anglais dans un logiciel anglais. :(
:!: Warning troll spotted :!:

:langue:
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

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

26 oct. 2011, 13:55

Bon ok c'est une mauvaise pratique que d'insérer des caractères non supportés par l'anglais dans un logiciel anglais.
exactement, n'oublie pas que les `c'est mysql comment font les autres ?

ceci dit ce la serais plus simple, pour nous, de pouvoir le faire, mais dans ce cas on va pouvoir mettre des espaces dans les noms de champs (Ms access style ?).

dans le même style essai de mettre un - dans un nom de champ, y a des chances que ça mette le brin dans la requete ( peut-être == la différence du champ peut et du champ être ou le champ peut-être ?).

bref, ceci est une contrainte inhérente au fait que ce ne sont pas des gens "gens comme nous" qui ont conçu le bouzin :mrgreen: .

bon après je de tester
create table prout (
    id int auto_increment not null primary key,
    désignation varchar(50),
    référence varchar(50),
    être varchar(50)
    )engine = innodb;
insert into prout (désignation,référence, être) values('un test','ref bidon','ou pas');
et mysql ne rale pas :)

pour être constructif une correction du code d'origine, car mysql_error() n'a rien a faire avec l'utilisation de PDO ;)
<?php
try {
	$reqreponse=$bdd->prepare('INSERT INTO Produits(Désignation, Référence) VALUES(:designation, :reference)');
	$reqreponse->execute(array(
						 'designation'=>$designation,                                                    
						 'reference'=>$reference
						 ));     
	$reqreponse->closeCursor();
}
catch (PDOException $e) {
	echo '<p class="erreur">Erreur SQL '.$e->getError().'<br />Trace<br />'.$e->GetTraceAsString().'</p>';
}
?>
sinon d'après la doc http://dev.mysql.com/doc/refman/5.0/fr/ ... dling.html

Erreur: 1064 SQLSTATE: 42000 (ER_PARSE_ERROR)

Message: %s près de '%s' à la ligne %d

ha oui ça aide pas :/

La pour le coup faut voir à quoi ressemble la requête complète :)
(var_dump etc etc)

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

Jordanus47
Invité n'ayant pas de compte PHPfrance

26 oct. 2011, 15:03

Bonjour,

Je vais tous vous remercier pour m'avoir mis sur la voie, c'est simplement que le nom de mes tables comportait des accents ("Désignation" et "Référence").
J'ai sorti les accents, et magie du PHP, le code fonctionne sans erreur !

Un grand merci à vous :D

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

26 oct. 2011, 16:03

donc a vu de nez pb d'encodage avec des caractères à la #%$! dans la requête surement ^^

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