Inserer quelques lignes issues d'un fichier.tx dans Mysql
Résolu
christian820
Messages postés
12
Statut
Membre
-
christian820 Messages postés 12 Statut Membre -
christian820 Messages postés 12 Statut Membre -
Bonjour,
Ce code fonctionne (sans le where), il insère bien toutes les lignes du fichier acte.txt .
Maintenant, si je veux trier sur TypeActe, valeur "Mariage" par un where, rien ne se passe, il n'insère rien. J'ai essayé de placer le where à divers endroits, mais soit j'ai une parse erreur, soit aucune insertion.
De même, J'ai essayé de mettre ceci à la place du where
$stmt->bindParam(':TypeMariage', Mariage);
Rien trouvé sur la doc, ni dans les forums .... Ma première question est : Est-ce possible?
Si oui, ma deuxième question est : Comment?
Merci de vos réponses
Cordialement,
Christian
<?php
//connexion à la base de donnèes
include("ConnectionBase.php");
$file=$_POST["actes"]; //Récupère le fichier texte "actes"
if (file_exists($file)) //Vérifie si le fichier actes existe
{
$lecture = fopen($file,"r"); //Ouvre le fichier $file
while (!feof($lecture)) //boucle permettant la lecture du fichier ligne par ligne
{
$ligne=fgets($lecture); //isole une ligne
$champ=explode("\t",$ligne); //décompose la ligne en champs
if (count($champ)!=4) continue; //permet d'éliminer les lignes vides
//extrait les données champ par champ
if($champ[0]!="null")
{$TypeActe=$champ[0];}
else {$TypeActe=" ";}
if($champ[1]!="null")
{$DateNaissanceConjoint=$champ[1];}
else {$DateNaissanceConjoint=" ";}
if($champ[2]!="null")
{$NomConjoint=$champ[2];}
else {$NomConjoint=" ";}
if($champ[3]!="null")
{$PrenomConjoint=$champ[3];}
else {$PrenomConjoint=" ";}
$stmt= $bdd->prepare('INSERT INTO actes(
TypeActe,
DateNaissanceConjoint,
NomConjoint,
PrenomConjoint)
VALUES(
:TypeActe,
:DateNaissanceConjoint,
:NomConjoint,
:PrenomConjoint)
//Ici, si je place
where TypeActe=Mariage
//afin de n'insérer que les lignes correspondant à un acte de mariage, rien ne se passe, c'est à dire que le code s'exéxute, mais aucune insertion ne se fait.
');
//si je le place là idem
$stmt->execute(array('TypeActe' => $TypeActe,
'DateNaissanceConjoint' => $DateNaissanceConjoint,
'NomConjoint' => $NomConjoint,
'PrenomConjoint' => $PrenomConjoint
));
} //fin du while
echo '<p>Vous avez enregistré vos actes dans la base de données</p>';
$bdd="null";
?>
Ce code fonctionne (sans le where), il insère bien toutes les lignes du fichier acte.txt .
Maintenant, si je veux trier sur TypeActe, valeur "Mariage" par un where, rien ne se passe, il n'insère rien. J'ai essayé de placer le where à divers endroits, mais soit j'ai une parse erreur, soit aucune insertion.
De même, J'ai essayé de mettre ceci à la place du where
$stmt->bindParam(':TypeMariage', Mariage);
Rien trouvé sur la doc, ni dans les forums .... Ma première question est : Est-ce possible?
Si oui, ma deuxième question est : Comment?
Merci de vos réponses
Cordialement,
Christian
A voir également:
- Inserer quelques lignes issues d'un fichier.tx dans Mysql
- Insérer vidéo dans powerpoint - Guide
- Insérer signature word - Guide
- Insérer un espace insécable dans word - Guide
- Insérer liste déroulante excel - Guide
- Insérer un sommaire dans word - Guide
1 réponse
Bonjour
Il est normal que ce code ne fonctionne pas avec WHERE. La syntaxe INSERT ... WHERE n'existe pas en SQL, car elle indiquerait une condition sur une ligne qui n'est pas encore dans la base.
Si tu ne veux pas insérer les lignes dont le TypeActe est Mariage, à toi de faire le test en PHP avant d'appeler ou non ta requête :
Petite remarque au passage : le $stmt= $bdd->prepare devrait être AVANT le while. Même si ça va marcher comme ça, tout l'intérêt du prepare PDO c'est qu'il suffit de le faire une seule fois et ne faire ensuite que des execute : un gros travail est ainsi économisé pour mysql.
Il est normal que ce code ne fonctionne pas avec WHERE. La syntaxe INSERT ... WHERE n'existe pas en SQL, car elle indiquerait une condition sur une ligne qui n'est pas encore dans la base.
Si tu ne veux pas insérer les lignes dont le TypeActe est Mariage, à toi de faire le test en PHP avant d'appeler ou non ta requête :
if ($TypeActe!="Mariage") {
$stmt->execute(array('...
}
Petite remarque au passage : le $stmt= $bdd->prepare devrait être AVANT le while. Même si ça va marcher comme ça, tout l'intérêt du prepare PDO c'est qu'il suffit de le faire une seule fois et ne faire ensuite que des execute : un gros travail est ainsi économisé pour mysql.
Merci pout ta réponse rapide.
C'est parfait, je marque le sujet résolu
Cordialement
Christian