Comment corriger efficacement une requête SQL PDO [Résolu]

Signaler
Messages postés
500
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
13 avril 2021
-
 SkyCrasher -
Bonjour,
Je tente d'enserrer des données dans une table en utilisant PDO.
mais il semble que qu'il y a une erreur dans la requête.

voici l'erreur quand j'execute en direct dans la base de données:

#1064 - 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 ':periode_etabl_bulletin,:periode_etabl_bulletin_annee,:taux_grad,:num_ordre,:mat' at line 2

voici ma requête :
$tab = array(
              ':periode_etabl_bulletin' => $_GET['periode']
              ,':periode_etabl_bulletin_annee' => $_GET['annee']
              ,':taux_grad' => $_POST["taux_grad"]
			  ,':num_ordre' => $_POST["num_ordre"]
              ,':matricule' => $matricule
              ,':noms' => $rows_pers["nom"]
              ,':prenoms' => $rows_pers["prenom"]
              ,':nationalite' => $rows_pers["nationalie"]
              ,':nb_mois_trav_effect' => $n_nbre_mois
              ,':date_dept_cg' => ''
              ,':cg_ann_acqui' => ''
              ,':fonction' => $rows_pers["fonction"]
              ,':date_entree' => $rows_pers["date"]
              ,':ctg' => ''
              ,':sit_fam' => $rows_pers["sit_fam"]
              ,':chef_fm' => $rows_pers["chef_fm"]
              ,':homfem' => $rows_pers["sexe"]
              ,':nb_enft' => '0'
              ,':nb_part' => ''
              ,':num_cnps' => $rows_pers["num_cnps"]
              ,':salaire_brut' => $rows_sal[$lemois]
              ,':nbrejw' => '30'
              ,':sursalaire' => '0'
              ,':prim_resp' => '0'
              ,':prim_gard' => '0'
              ,':indem_transp' => '0'
              ,':type_sal' => 'Mensuel'
              ,':paymnt' => 'Espece'
              ,':ma_session' => 'Mis79'
              ,':date' => $date_utc
              ,':id_get' => $id_pers
              ,':jour' => $jour
              ,':mois' => $mois
              ,':annee' => $annee
              );
$sql_absc = "INSERT INTO bulletin(periode_etabl_bulletin,periode_etabl_bulletin_annee,taux_grad,num_ordre,matricule,noms,prenoms,nationalite,nb_mois_trav_effect,date_dept_cg,cg_ann_acqui,fonction,date_entree,ctg,sit_fam,chef_fm,homfem,nb_enft,nb_part,num_cnps,salaire_brut,nbrejw,sursalaire,prim_resp,prim_gard,indem_transp,type_sal,paymnt,ma_session,date,id_get,jour,mois,annee) 
        VALUES (:periode_etabl_bulletin,:periode_etabl_bulletin_annee,:taux_grad,:num_ordre,:matricule,:noms,:prenoms,:nationalite,:nb_mois_trav_effect,:date_dept_cg,:cg_ann_acqui,:fonction,:date_entree,:ctg,:sit_fam,:chef_fm,:homfem,:nb_enft,:nb_part,:num_cnps,:salaire_brut,:nbrejw,:sursalaire,:prim_resp,:prim_gard,:indem_transp,:type_sal,:paymnt,:ma_session,:date,:id_get,:jour,:mois,:annee)";			  
 $sql_absc;

$req_absc = $bdd->prepare($sql_absc);
// cette méthode te retourne true/false si ça a réussi/échoué
$result = $req_absc->execute($tab);

// Du coup, on peux tester sur le retour et afficher l'erreur en cas de soucis
if (!$result) {
    // ça t'affiche juste un code. C'est suffisant en prod pour que l'utilisateur te fasse un retour
    echo "Une erreur est survenue : " . $req_absc->errorCode();

    // Mais en dev, pour comprendre, tu peux faire ça :
    print_r($req_absc->errorInfo());
}



voici la structure de ma table:

CREATE TABLE IF NOT EXISTS `bulletin` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`periode_etabl_bulletin` varchar(15) NOT NULL,
`periode_etabl_bulletin_annee` varchar(10) NOT NULL,
`taux_grad` int(10) NOT NULL,
`num_ordre` varchar(30) NOT NULL,
`matricule` varchar(30) NOT NULL,
`noms` varchar(200) NOT NULL,
`prenoms` varchar(200) NOT NULL,
`nationalite` varchar(120) NOT NULL,
`nb_mois_trav_effect` varchar(15) NOT NULL,
`date_dept_cg` varchar(30) NOT NULL,
`cg_ann_acqui` varchar(60) NOT NULL,
`fonction` varchar(150) NOT NULL,
`date_entree` varchar(60) NOT NULL,
`ctg` varchar(30) NOT NULL,
`sit_fam` varchar(60) NOT NULL,
`chef_fm` varchar(10) NOT NULL,
`homfem` varchar(60) NOT NULL,
`nb_enft` varchar(10) NOT NULL,
`nb_part` varchar(10) NOT NULL,
`num_cnps` varchar(30) NOT NULL,
`salaire_brut` int(30) NOT NULL,
`nbrejw` int(10) NOT NULL,
`sursalaire` varchar(30) NOT NULL,
`prim_resp` varchar(30) NOT NULL,
`prim_gard` varchar(30) NOT NULL,
`indem_transp` varchar(30) NOT NULL,
`type_sal` varchar(80) NOT NULL,
`paymnt` varchar(50) NOT NULL,
`ma_session` varchar(100) NOT NULL,
`date` datetime NOT NULL,
`id_get` int(11) NOT NULL,
`jour` varchar(30) NOT NULL,
`mois` varchar(30) NOT NULL,
`annee` varchar(30) NOT NULL,
`date2` varchar(30) NOT NULL,
`id_period` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

3 réponses

Messages postés
45
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
20 février 2021

Bonjour, je trouve bizarre qu'il y ait $_POST et $_GET, alors que dans un formulaire on choisit soit l'un soit l'autre.
Non?
Messages postés
32446
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 mai 2021
347
Bonjour,


Pour commencer, ... où est passé la récupération PROPRE des variables AVANT de les utiliser ... tel que je te l'explique depuis au moins 1 an ????

Il serait bien que tu commences ENFIN à suivre le contenu de ce lien http://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code et que je n'ai pas à te répéter toujours les mêmes choses à chaque fois que tu viens poser une question sur ce forum !


Ensuite, pour ce qui est de ton souci, peux tu essayer d'écrire la requête comme ceci puis de voir si tu as toujours le même message d'erreur :
<?php

$sql_absc = "INSERT INTO bulletin(
					periode_etabl_bulletin,
					periode_etabl_bulletin_annee,
					taux_grad,
					num_ordre,
					matricule,
					noms,
					prenoms,
					nationalite,
					nb_mois_trav_effect,
					date_dept_cg,
					cg_ann_acqui,
					fonction,
					date_entree,
					ctg,
					sit_fam,
					chef_fm,
					homfem,
					nb_enft,
					nb_part,
					num_cnps,
					salaire_brut,
					nbrejw,
					sursalaire,
					prim_resp,
					prim_gard,
					indem_transp,
					type_sal,
					paymnt,
					ma_session,
					date,
					id_get,
					jour,
					mois,
					annee
					) 
			VALUES (
					:periode_etabl_bulletin,
					:periode_etabl_bulletin_annee,
					:taux_grad,
					:num_ordre,
					:matricule,
					:noms,
					:prenoms,
					:nationalite,
					:nb_mois_trav_effect,
					:date_dept_cg,
					:cg_ann_acqui,
					:fonction,
					:date_entree,
					:ctg,
					:sit_fam,
					:chef_fm,
					:homfem,
					:nb_enft,
					:nb_part,
					:num_cnps,
					:salaire_brut,
					:nbrejw,
					:sursalaire,
					:prim_resp,
					:prim_gard,
					:indem_transp,
					:type_sal,
					:paymnt,
					:ma_session,
					:date,
					:id_get,
					:jour,
					:mois,
					:annee
				)";	


Assures toi également que ton fichier est bien encodé en utf8
Rappel : http://www.commentcamarche.net/faq/47069-html-php-caracteres-accentues-et-l-utf8#1-verifiez-l-encodage-des-fichiers
Regarde aussi tes guillemets:
$_POST["num_ordre"] et $_GET['periode']