Requète INSERT avec jointure [Fermé]

Signaler
Messages postés
657
Date d'inscription
dimanche 24 août 2008
Statut
Membre
Dernière intervention
24 juillet 2016
-
Messages postés
657
Date d'inscription
dimanche 24 août 2008
Statut
Membre
Dernière intervention
24 juillet 2016
-
Bonjour,
Je souhaite faire une jointure afin d'insérer les valeurs d'une table dans une autre, je pense qu'il faut faire un INSERT avec un SELECT.
Je n'arrive pas à faire fonctionner ma requète, c'est une requète préparée je pense que ça vient de la syntax.
Pouvez vous me donner votre avis s'ils vous plait, il y a longtemps que je galère avec cette requète.
En vous remerciant très sincérement de votre aide.
Merci

		case 'ajouter':		
				$sql = "INSERT INTO tb_gestion_adherent (civilite, nom, prenom, adresse_mail, date_naissance, telephone_fixe, telephone_mobile, adresse, lieu_dit, code_postal, ville, login, pass)
				VALUES (:civilite, :nom, :prenom, :adresse_mail, :date_naissance, :telephone_fixe, :telephone_mobile, :adresse, :lieu_dit, :code_postal, :ville, :login, :pass)";
			$requete = $bdd->prepare($sql);
			$requete->bindParam(':civilite',        	$PARAM['CIVILITE']);
			$requete->bindParam(':nom',             	$PARAM['NOM']);
			$requete->bindParam(':prenom',          	$PARAM['PRENOM']);
			$requete->bindParam(':adresse_mail',    	$PARAM['ADRESSE_MAIL']);
			$requete->bindParam(':date_naissance',  	$PARAM['DATE_NAISSANCE']);
			$requete->bindParam(':telephone_fixe',  	$PARAM['TELEPHONE_FIXE']);
			$requete->bindParam(':telephone_mobile',	$PARAM['TELEPHONE_MOBILE']);
			$requete->bindParam(':adresse',         	$PARAM['ADRESSE']);
			$requete->bindParam(':lieu_dit',        	$PARAM['LIEU_DIT']);
			$requete->bindParam(':code_postal',     	$PARAM['CODE_POSTAL']);			
			$requete->bindParam(':ville',           	$PARAM['VILLE']);
			$requete->bindParam(':login',           	$PARAM['LOGIN']);
			$requete->bindParam(':pass',            	$PARAM['PASS']);
			$requete->execute();
            
    			$sql = "INSERT INTO tb_gestion_admin (id_gestion_admin, rid_adherent, rid_categorie_statut)
				SELECT (:id_gestion_admin, :rid_adherent, :rid_categorie_statut)
FROM tb_gestion_admin
left outer JOIN tb_gestion_adherent
ON tb_gestion_admin.rid_adherent = tb_gestion_adherent.id_adherent 
left outer JOIN tb_categorie_statut
ON tb_gestion_admin.rid_categorie_statut = tb_categorie_statut.id_categorie_statut";					
			$requete = $bdd->prepare($sql);
			$requete->bindParam(':id_gestion_admin',        $PARAM['ID_GESTION_ADMIN']);
			$requete->bindParam(':rid_adherent',        	$PARAM['RID_ADHERENT']);
			$requete->bindParam(':rid_categorie_statut',    $PARAM['RID_CATEGORIE_STATUT']);
			$requete->execute();				
			break; 	

9 réponses

Messages postés
657
Date d'inscription
dimanche 24 août 2008
Statut
Membre
Dernière intervention
24 juillet 2016
5
Bonjour


J'ai mis en paramètre après le SELECT la Valeur et non le nom des champs comme tu me l'a dit

Et surprise ma requète SQL dans PhpMyAdmin elle fonctionne très bien.

Par contre dans ma page PHP toujours ce message d'erreur


Notice: Undefined property: PDO::$errorInfo in C.........


$sql = "INSERT INTO tb_gestion_admin ( rid_adherent, rid_categorie_statut )
SELECT tb_gestion_adherent.id_adherent, tb_categorie_statut.id_categorie_statut
FROM tb_gestion_adherent
LEFT OUTER JOIN (tb_categorie_statut
LEFT OUTER JOIN tb_gestion_admin
ON tb_categorie_statut.id_categorie_statut = tb_gestion_admin.rid_categorie_statut)
ON tb_gestion_adherent.id_adherent = tb_gestion_admin.rid_adherent
or die(print_r($bdd->errorInfo()))";


Si jamais tu comprend cette erreur Merci

Merci beaucoup
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 92320 internautes nous ont dit merci ce mois-ci

Messages postés
657
Date d'inscription
dimanche 24 août 2008
Statut
Membre
Dernière intervention
24 juillet 2016
5
Bonjour,
J'ai fait une requête préparée pour un insert avec des jointures pouvez-vous me donner un coup de main je suis un peu perdu.
Je vous remercie beaucoup.
Messages postés
657
Date d'inscription
dimanche 24 août 2008
Statut
Membre
Dernière intervention
24 juillet 2016
5
Bonjour
Excusez moi d'insister je suis vraiment perdu avec ses jointures malgrès tous les tutos que j'ai pu lire, un petit coup de main je vous en supplie.
Merci beaucoup
Messages postés
2379
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
10 mars 2020
425
Salut,

Peux tu nous donner le message d'erreur que te retourne PDO ?

Sinon ta deuxième requête est étrange, tu as mis le nom des champs en paramètres après ton SELECT, ça ne me semble pas normal. Tu connais déjà le nom des champs, c'est plutôt leurs valeurs que tu dois passer en paramètre.
Messages postés
657
Date d'inscription
dimanche 24 août 2008
Statut
Membre
Dernière intervention
24 juillet 2016
5
Bonjour
Déjà un grand merci je désespérais de trouver une âme charitable pour me donner des conseils.

Mon message d'erreur est

Notice: Undefined property: PDO::$errorInfo in C......

Merci
Messages postés
2379
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
10 mars 2020
425
Salut,

PDO::errorInfo() retourne uniquement les informations des erreurs pour les opérations exécutées directement sur un gestionnaire de base de données. Si vous créez un objet PDOStatement avec la fonction PDO::prepare() ou la fonction PDO::query() et que vous invoquez une erreur sur le gestionnaire de requête, PDO::errorInfo() ne retournera pas l'erreur depuis le gestionnaire de requête. Vous devez appeler la fonction PDOStatement::errorInfo() pour retourner les informations sur l'erreur pour une opération exécutée sur un gestionnaire de requête particulier.
Source : https://www.php.net/manual/fr/pdo.errorinfo.php

Il faut que tu définisse le mode d'erreur dans la création de ton objet PDO pour voir les erreurs SQL : https://www.php.net/manual/fr/pdo.error-handling.php

Bonne journée
Messages postés
657
Date d'inscription
dimanche 24 août 2008
Statut
Membre
Dernière intervention
24 juillet 2016
5
Bonjour

Mon erreur est

PDOStatement::errorInfo(): Array ( [0] => 00000 [1] => [2] => )

Peux tu me dire s'il te plait en clair à quoi correspond cette erreur.
Avec mes remerciements
Messages postés
2379
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
10 mars 2020
425
Ton message d'erreur est vide.

Tu dois appeler la méthode errorInfo() sur ton instance PDOStatement, soit la variable $requete dans le code de ton premier message :
$requete = $bdd->prepare($sql);
if (!$requete) {
    var_dump($requete->errorInfo());
}
Messages postés
657
Date d'inscription
dimanche 24 août 2008
Statut
Membre
Dernière intervention
24 juillet 2016
5
Bonjour
Je reviens vers toi si tu peux m'aiguiller un peu.
En fait je suis repartie de zéro car j'étais mal parti.

J'ai créé ce script php ci-dessous

if(isset($_POST['action']) && !empty($_POST['categorie_statut'])){
	echo '<pre>';
	print_r($_POST['categorie_statut']);
	echo '</pre>';

	$categorie_statut ='';

	for ( $i = 0; $i < count($_POST['categorie_statut']); $i++ )

	echo $categorie_statut;
}
else{
	echo 'Sélectionner pour ce Membre un choix pour la catégorie statut!';
}

qui me renvoie bien mon tableau avec les case à coché ci-dessous
Array
(
    [0] => 1
)


Maintenat il faudrais que je fasse une boucle sur ce tableau et une insertion par tour de boucle dans ma BDD en sachant que j'ai une table "gestion_admin" avec comme champs
id_gestion_admin (auto incrémente)
rid_adherent relation avec les adherent à insérer
rid_categorie_statut relation avec les categorie des cases à cocher

Toute les infos c'est avec un formulaire que je les rentres.
Bien entendu pour l'insertion des membres ça marche déjà.

un très grand merci si tu peux me donner des infos simplement en écrivant comment je pourrais m'y prendre comme ça sa me fera travaillé mes meninges lol.
Merci encore