Requete sql select into
CHUM2021
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
j'ai une requete selection resultant de 03 tables (f_consulte ,f_malade_consulte ,box) et résulat d'une autre requete selection(requete_tmp) mais j'ai le message d'erreur suivant :
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1327 Undeclared variable: tab_tmp' in C:\wamp\www\Gestion Urgences Medico-Chirurgicaux - Copie\admin\malades\page_lstmal_medecin.php on line 61
( ! ) PDOException: SQLSTATE[42000]: Syntax error or access violation: 1327 Undeclared variable: tab_tmp in C:\wamp\www\Gestion Urgences Medico-Chirurgicaux - Copie\admin\malades\page_lstmal_medecin.php on line 61
Donc si j'ai bien compris , la table tab_tmp resultant de la requete($requete_tmp) n'est pas reconnue.
je vous remercie d'avance pour votre aide
j'ai une requete selection resultant de 03 tables (f_consulte ,f_malade_consulte ,box) et résulat d'une autre requete selection(requete_tmp) mais j'ai le message d'erreur suivant :
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1327 Undeclared variable: tab_tmp' in C:\wamp\www\Gestion Urgences Medico-Chirurgicaux - Copie\admin\malades\page_lstmal_medecin.php on line 61
( ! ) PDOException: SQLSTATE[42000]: Syntax error or access violation: 1327 Undeclared variable: tab_tmp in C:\wamp\www\Gestion Urgences Medico-Chirurgicaux - Copie\admin\malades\page_lstmal_medecin.php on line 61
Donc si j'ai bien compris , la table tab_tmp resultant de la requete($requete_tmp) n'est pas reconnue.
je vous remercie d'avance pour votre aide
$requete_tmp= "SELECT idmalade, idbox INTO tab_tmp FROM f_consulte WHERE idbox=$boxx"; $result_requete_tmp=$pdo->query($requete_tmp); $t_les_malades=$result_requete_tmp->fetchAll(); $requete_malades="SELECT distinct M.idmalade, C.idbox,M.nom_malade,M.prenom_malade,M.dat_nais_malade,M.genre_malade,M.date_arrivee,M.heure_arrivee,B.box FROM f_consulte C,f_malade_consulte M,box B,requete_tmp T WHERE C.orientation_box=B.id AND C.idmalade=M.idmalade AND C.idmalade!=T.idmalade"; $result_requete_malades=$pdo->query($requete_malades); $tous_les_malades=$result_requete_malades->fetchAll();
Configuration: Windows / Chrome 92.0.4515.107
A voir également:
- Requete sql pix
- Code ascii pix - Guide
- Que cache l'ours polaire pix ✓ - Forum Google Chrome
- Supprimez les composantes rouge et verte de cette image. quel mot apparaît ? pix - Forum Word
- Dans la table des matières de ce document le chapitre 6 et ses 2 sections n'apparaissent pas pix - Forum Word
- Consultez le code source de cette page pix - Forum Réseaux sociaux
7 réponses
Bonjour
Aucun problème au niveau des requêtes sql...
Le souci se trouve dans le code php à la ligne 61 ...
C'est cette ligne qu'il faut regarder...
Undeclared variable: tab_tmp in C:\wamp\www\Gestion Urgences Medico-Chirurgicaux - Copie\admin\malades\page_lstmal_medecin.php on line 61
Aucun problème au niveau des requêtes sql...
Le souci se trouve dans le code php à la ligne 61 ...
C'est cette ligne qu'il faut regarder...
Bonjour
Merci pour votre réponse.
la ligne 61 dans mon code correspond à la ligne 3 du code que j'ai publié
c-a-d
$result_requete_tmp=$pdo->query($requete_tmp);
Donc je ne vois pas où est l'erreur.
Merci pour votre réponse.
la ligne 61 dans mon code correspond à la ligne 3 du code que j'ai publié
c-a-d
$result_requete_tmp=$pdo->query($requete_tmp);
Donc je ne vois pas où est l'erreur.
Je n'avais pas bien lu ta ligne de code..
Dans une requête SELECT c'est un from qu'il faut mettre et non pas un into
Dans une requête SELECT c'est un from qu'il faut mettre et non pas un into
Bonjour,
Pour que la deuxième requête puisse utiliser la table créée dans la première requête, il me semble que ces deux requêtes doivent être exécutées dans la même transaction (par exemple via un seul appel à $pdo->query()).
Je n'ai pas testé mais tu peux essayer d'exécuter des deux requêtes à la suite comme ceci :
Ou d'inclure directement ta première requête dans la seconde :
Au passage, il faudrait idéalement protéger les requêtes contre les injections sql avec la fonction quote() de PDO ou en utilisant des requêtes préparées.
Bonne journée,
Pour que la deuxième requête puisse utiliser la table créée dans la première requête, il me semble que ces deux requêtes doivent être exécutées dans la même transaction (par exemple via un seul appel à $pdo->query()).
Je n'ai pas testé mais tu peux essayer d'exécuter des deux requêtes à la suite comme ceci :
$requete ="SELECT idmalade, idbox INTO tab_tmp FROM f_consulte WHERE idbox=$boxx; SELECT distinct M.idmalade, C.idbox,M.nom_malade,M.prenom_malade,M.dat_nais_malade,M.genre_malade,M.date_arrivee,M.heure_arrivee,B.box FROM f_consulte C,f_malade_consulte M,box B, tab_tmp T WHERE C.orientation_box=B.id AND C.idmalade=M.idmalade AND C.idmalade!=T.idmalade"; $result=$pdo->query($requete);
Ou d'inclure directement ta première requête dans la seconde :
$requete ="SELECT distinct M.idmalade, C.idbox,M.nom_malade,M.prenom_malade,M.dat_nais_malade,M.genre_malade,M.date_arrivee,M.heure_arrivee,B.box FROM f_consulte C,f_malade_consulte M,box B, (SELECT idmalade, idbox FROM f_consulte WHERE idbox=$boxx) T WHERE C.orientation_box=B.id AND C.idmalade=M.idmalade AND C.idmalade!=T.idmalade"; $result=$pdo->query($requete);
Au passage, il faudrait idéalement protéger les requêtes contre les injections sql avec la fonction quote() de PDO ou en utilisant des requêtes préparées.
Bonne journée,
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci pour votre réponse
je vais essayer les 02 solutions que vous m'avez prposées et vous rendre la réponse
je vais essayer les 02 solutions que vous m'avez prposées et vous rendre la réponse
Bonjour Pitet
j'ai essayé la 2eme solution, le message d'erreur n'est plus affiché, donc j'ai eu un résultat mais je n'ai pas eu le résultat attendu de l'execution de la requete .
en effet la condition " AND C.idmalade!=T.idmalade" n'est pas vérifiée car je pense qu'il n' y a pas de jointure entre la table ayant l'alias C et celle ayant l'alias T resultant de l'execution de la requete.
Donc, comme je ne m'y connais pas trop en jointures, est ce que vous pouvez m'aider à résoudre ce problème.
Merci d'avance pour votre aide
j'ai essayé la 2eme solution, le message d'erreur n'est plus affiché, donc j'ai eu un résultat mais je n'ai pas eu le résultat attendu de l'execution de la requete .
en effet la condition " AND C.idmalade!=T.idmalade" n'est pas vérifiée car je pense qu'il n' y a pas de jointure entre la table ayant l'alias C et celle ayant l'alias T resultant de l'execution de la requete.
Donc, comme je ne m'y connais pas trop en jointures, est ce que vous pouvez m'aider à résoudre ce problème.
Merci d'avance pour votre aide
Difficile de donner une requête sql correcte sans comprendre comment sont organisées les données dans la base et sans savoir quel est le résultat attendu. Il faudrait préciser quelles sont les données enregistrés dans chaque table, à quoi elles correspondent et quelles sont les relations entre ces tables (avec un exemple idéalement).
Pour essayer de te guider un minimum : puisque l'identifiant du malade est présent dans les tables f_consulte et f_malade_consulte, tu peux donc utiliser ce champ pour réaliser la jointure. Un exemple pour te montrer la syntaxe d'une jointure :
Tu trouveras des explications plus claires et plus complètes sur les jointures ici : https://sql.sh/cours/jointures
Si ce n'est pas déjà le cas, essayes d'utiliser un client sql (PhpMyAdmin, HeidiSQL, etc...) pour te concentrer uniquement sur la partie SQL afin de construire la requête étape par étape (faire une première jointure entre les tables f_malade_consulte et f_consulte, puis ajouter une seconde jointure pour la table box, puis ajouter les conditions dans la clause WHERE, ...).
Lorsque la requête sql correspondra au résultat attendu, tu pourras alors l'implémenter dans ton code PHP.
Pour essayer de te guider un minimum : puisque l'identifiant du malade est présent dans les tables f_consulte et f_malade_consulte, tu peux donc utiliser ce champ pour réaliser la jointure. Un exemple pour te montrer la syntaxe d'une jointure :
SELECT M.idmalade, M.nom_malade, M.prenom_malade, C.idbox FROM f_malade_consulte M LEFT JOIN f_consulte C ON C.idmalade != M.idmalade WHERE C.idbox = 5
Tu trouveras des explications plus claires et plus complètes sur les jointures ici : https://sql.sh/cours/jointures
Si ce n'est pas déjà le cas, essayes d'utiliser un client sql (PhpMyAdmin, HeidiSQL, etc...) pour te concentrer uniquement sur la partie SQL afin de construire la requête étape par étape (faire une première jointure entre les tables f_malade_consulte et f_consulte, puis ajouter une seconde jointure pour la table box, puis ajouter les conditions dans la clause WHERE, ...).
Lorsque la requête sql correspondra au résultat attendu, tu pourras alors l'implémenter dans ton code PHP.