Requête MySQL corrompue par PHP ?
Posté : 10 févr. 2012, 03:04
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 :
Mais quand MySQL la reçoit, ça ne marche pas. Le serveur répond :
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é :
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
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();