J'ai la requête suivante qui fonctionne très bien via phpmyadmin :
Code : Tout sélectionner
CREATE TEMPORARY TABLE parents_temp (idparent tinyint(3) unsigned);
LOCK TABLES tags READ, tag_has_parent READ;
INSERT INTO parents_temp SELECT parent_id FROM tag_has_parent WHERE tag_id = 15;
SELECT tags.tag_name FROM tags, parents_temp WHERE tags.tag_id = parents_temp.idparent;
UNLOCK TABLES;
DROP TABLE parents_temp;Code : Tout sélectionner
$sql = "CREATE TEMPORARY TABLE parents_temp (idparent tinyint(3) unsigned);";
$sql .= "LOCK TABLES tags READ, tag_has_parent READ;";
$sql .= "INSERT INTO parents_temp SELECT parent_id FROM tag_has_parent WHERE tag_id = 15;";
$sql .= "SELECT tags.tag_name FROM tags, parents_temp WHERE tags.tag_id = parents_temp.idparent;";
$sql .= "UNLOCK TABLES;";
$sql .= "DROP TABLE parents_temp;";
$requete = mysql_query($sql, $solutionh) or die(mysql_error());
$resultat = mysql_fetch_assoc($requete);
Je suis donc obligé de faire :
Code : Tout sélectionner
$sql = "CREATE TEMPORARY TABLE IF NOT EXISTS parents_temp (idparent tinyint(3) unsigned) ;";
$requete=mysql_query($sql, $solutionh) or die(mysql_error());
$sql = "LOCK TABLES tags READ, tag_has_parent READ ;";
$requete=mysql_query($sql, $solutionh) or die(mysql_error());
$sql = "INSERT INTO parents_temp SELECT parent_id FROM tag_has_parent WHERE tag_id = 15 ;";
$requete=mysql_query($sql, $solutionh) or die(mysql_error());
$sql = "SELECT tags.tag_name FROM tags, parents_temp WHERE tags.tag_id = parents_temp.idparent ;";
$requete=mysql_query($sql, $solutionh) or die(mysql_error());
$resultat = mysql_fetch_assoc($requete);
$sql = "UNLOCK TABLES ;";
$requete=mysql_query($sql, $solutionh) or die(mysql_error());
$sql = "DROP TABLE parents_temp ;";
$requete=mysql_query($sql, $solutionh) or die(mysql_error());
J'ai bien évidemment fait un echo de $sql et j'ai beau lire et relire, je ne vois aucune erreur de syntaxe.
Quelqu'un aurait-il une explication concernant ce phénomène ? Et surtout y a-t-il une manière propre de le contrer ?
Tant que j'y pense et avant que vous ne demandiez, je suis obligé de travailler avec cette requête parce qu'il existe malheureusement encore des serveurs mysql de production qui n'acceptent pas les requêtes imbriquées. Cela dit, cette fameuse erreur de syntaxe (que je ne trouve pas) m'est renvoyée par mysql 3.23, 4 et 5.
Merci d'avance.
Bonne soirée.
PS : finalement, j'en viens à penser que cette une limitation de mysql et que ce message n'est pas dans la bonne salle. Si c'est le cas, un modérateur ne manquera pas de déplacer.