4 votes

PDO Créer une table temporaire et sélectionner

J'essaie de créer une table temporaire à partir des résultats de plusieurs tables similaires (même structure de table). Après avoir créé la table temporaire et exécuté les requêtes suivantes, j'aimerais stocker les résultats de la table temporaire dans un tableau qui sera accessible ultérieurement dans le programme script. J'ai essayé de chercher une réponse mais je n'arrive pas à en trouver une.

J'ai essayé nextRowset() ainsi que de séparer les requêtes, mais rien ne semble fonctionner comme je l'aurais souhaité.

Voici mon code :

$pdo = new PDO("mysql:host=".$_SESSION['server'].";dbname=data".$_SESSION['sysident'],$user,$pass);
$stmt = $pdo->prepare("DROP TABLE IF EXISTS $tabletocreate;
                CREATE TEMPORARY TABLE $tabletocreate LIKE table1;
                INSERT INTO $tabletocreate (SELECT * FROM table1 WHERE (MISC LIKE '%:memno%' OR MEMNO = :memno)) UNION (SELECT * FROM table2 WHERE (MISC LIKE '%:memno%' OR MEMNO = :memno)) UNION (SELECT * FROM table3 WHERE (MISC  LIKE '%:memno%' OR MEMNO = :memno)) ORDER BY SLIPNO;
                SELECT * FROM $tabletocreate");
$stmt->bindParam(":memno",$_SESSION['memno']);
$stmt->execute();

$stmt->nextRowset();

$test = $stmt->fetchAll();
print_r($test);

Je ne sais pas pourquoi les résultats ne sont pas stockés dans le tableau. D'après ce que je peux dire, tout semble correct et aucune erreur ne se produit lorsque le script est exécuté. Je vous remercie de l'aide que vous pourrez m'apporter.

MISE À JOUR - J'ai trouvé pourquoi la requête ne fonctionnait pas. J'ai utilisé un "-" dans le nom de la table que j'essayais de créer, ce qui n'est pas autorisé.

4voto

Marc B Points 195501

Vous ne pouvez pas exécuter plusieurs requêtes dans un seul ->query() appel. Il s'agit d'une mesure de sécurité dans les pilotes PHP mysql sous-jacents, afin de prévenir certaines formes d'attaques par injection SQL. La bibliothèque d'interface DB que vous utilisez n'a pas d'importance, car elles utilisent toutes les mêmes pilotes sous-jacents. Vous devrez exécuter chaque requête séparément :

->query("DROP TABLE IF EXISTS ...");
->query("CREATE TEMPORARY TABLE ...");
->query("INSERT INTO ...");
etc...

1voto

kccoers Points 129

J'essayais de créer un nom de table avec un "-" dans le nom de la table. Après avoir supprimé ce "-" du nom de la table, toutes les requêtes se sont exécutées avec succès et mon code PHP a fonctionné comme prévu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X