Page 1 sur 1

Requête MySQL corrompue par PHP ?

Posté : 10 févr. 2012, 03:04
par Octave
Bonjour,

J'utilise PHP et MySQL 5.1.49 via localhost sur mon ordinateur (Mac OS 10.6). Mon script PHP analyse un tableau en CSV et produit une requête MySQL pour créer une table à partir de ce tableau (voir le script ci-dessous).
La requête semble bien rédigée. Mon script l'affiche en HTML avant de l'envoyer, et elle a cette forme :
CREATE TABLE IF NOT EXISTS genrestest3 (ClassificationtermineeON varchar(20), Ref varchar(20), MS varchar(20), IDMSS varchar(20), TIDO varchar(20), IDT2 smallint(5) PRIMARY KEY)
(En fait, la requête est plus longue, mais je ne pense pas que ça change quoi que ce soit...)

Mais quand MySQL la reçoit, ça ne marche pas. Le serveur répond :

Code : Tout sélectionner

ERROR 1064 (42000): 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 '??ClassificationtermineeON varchar(20), Ref varchar(20), MS varchar(20), IDMSS v' at line 1
Vous voyez les deux "?" avant la clause de définition des colonnes ? Ca ressemble à un problème d'encodage, car si je copie et colle cette requête dans le Terminal, et que je réécris manuellement les caractères correspondant à la fin du nom de la table et au début de la définition des colonnes, ça marche parfaitement.
Mon diagnostic vous semble-t-il bon ? Comment réparer cela ?
Merci pour votre aide, parce que ce problème dépasse mes compétences...

Octave

Extrait du script PHP utilisé :
// Composition de la requête
$nomTable=$_POST['nomTable'];
$r='CREATE TABLE IF NOT EXISTS '.$nomTable.' (';
echo 'Création de la requête commencée.<br>';
$usedNames=array();

foreach ($enTeteTableau as $nomColonne) {
	if ($nomColonne=='') {continue;}
	$nomColonne=columnize($nomColonne);
	while (in_array($nomColonne, $usedNames)) // vérification qu'une autre colonne avec le même nom n'est pas déjà indiquée.
		{$nomColonne=$nomColonne."b";}
	array_push($usedNames, $nomColonne);
	echo $nomColonne.'<br>';
	if ($nomColonne=='IDT2') {
		$r=$r."IDT2 smallint(5) PRIMARY KEY, ";}
	elseif ($nomColonne!='') {
		$r=$r.$nomColonne." varchar(20), ";}
	}
// Fermeture de la requête :
$r=rtrim($r,', ');//retrait de la dernière virgule
$r=$r.")";
echo $r;
$resultat=mysql_query($r);
echo '<br>'.mysql_error();

Re: Requête MySQL corrompue par PHP ?

Posté : 10 févr. 2012, 09:35
par xTG

Re: Requête MySQL corrompue par PHP ?

Posté : 10 févr. 2012, 22:53
par Octave
Merci beaucoup ! Ce tutoriel m'a permis de régler mon problème, même si c'était avec beaucoup de tatonnements et que du coup je n'ai pas vraiment identifié d'où venait le problème précisément...

Octave

Re: Requête MySQL corrompue par PHP ?

Posté : 17 févr. 2012, 18:10
par Tibo
Bonjour je serais fortement intéressé par le code corrigé si c'est possible, car je dois mettre ne place le même type de procédure.
D'avance merci,

Re: Requête MySQL corrompue par PHP ?

Posté : 17 févr. 2012, 18:40
par xTG
Il n'y a pas que le code qui est impacté.
Lis le lien que j'ai donné pour avoir toutes les corrections.

Re: Requête MySQL corrompue par PHP ?

Posté : 17 févr. 2012, 19:14
par Octave
Bonjour je serais fortement intéressé par le code corrigé si c'est possible, car je dois mettre ne place le même type de procédure.
D'avance merci,
Ce sont les corrections qui t'intéressent, ou le script pour faire une nouvelle table à partir d'un CSV, ou les deux ?
Mon code est un peu brouillon, donc si tu n'es concerné que par les problèmes d'encodage, je ne mettrai que les correctifs apportés pour cela.

Octave