Dans l'optique de créer et modifier plusieurs tables dans ma BDD, est-il possible d'utiliser la requête UPDATE lorsque la table n'est pas créé? Car j'aimerais pouvoir avoir le choix de modifier la table si elle existe et de la créer si elle n'existe pas.
Merci
- Edité par DimitriNeker1 20 janvier 2017 à 11:04:36
Oups, il semblerait que j'ai confondu entrée et table, je ne souhaite pas modifier une table. Je voulais donc savoir si je pouvais utiliser la requête INSERT INTO à la place de UPDATE afin de pourvoir insérer une nouvelle ligne ou la modifier si elle existe déjà.
ton code comme tu devrais l'avoir pour tester le retour d'execute:
<?php
//Nomme les variable pour ce qu'elles sont vraiment
$requete = 'UPDATE synthese_dev_sw SET type = :type, Complexite = :Complexite , Date_Lancement = :Date_Lancement, Date_Livraison = :Date_Livraison , Commentaires = :Commentaires WHERE id = :id';
//prepare la requete UPDATE
$stmt = $link->prepare($requete);
//Bind des données
$stmt->bindValue('type',$this->type_sw);
$stmt->bindValue('Complexite',$this->type_sw);
$stmt->bindValue('Date_Lancement',$this->type_sw);
$stmt->bindValue('Date_Livraison',$this->type_sw);
$stmt->bindValue('Commentaires',$this->type_sw);
$stmt->bindValue('id',$id);
if (!$stmt->execute()) {
echo 'ERREUR EXECUTE UPDATE';
} else {
//UPDATE OK mais sur combien de lignes ???
$nbLignesAffectees = $stmt->rowCount();
if ($nbLignesAffectees == 0) {
//pas de lignes affectes => on doit inserer
$requete = 'INSERT INTO synthese_dev_sw (type,Complexite,Date_Lancement,Date_Livraison,Commentaires)';
$requete .= ' VALUES ';
$requete .= '(:type,:Complexite,:Date_Lancement,:Date_Livraison,:Commentaires)';
//prepare la requete INSERT
$stmt2 = $link->prepare($requete);
//Bind des données
$stmt2->bindValue('type',$this->type_sw);
$stmt2->bindValue('Complexite',$this->complexite_sw);
$stmt2->bindValue('Date_Lancement',$this->date_lancement);
$stmt2->bindValue('Date_Livraison',$this->date_livraison);
$stmt2->bindValue('Commentaires',$this->commentaire);
$stmt2->bindValue('id',$id);
if (!$stmt2->execute()) {
echo 'ERREUR EXECUTE INSERT';
} else {
echo 'Nouvelles donnees inserees';
}
} else if ($nbLignesAffectees > 1) {
//si ID en auto increment tu ne dois JAMAIS passer ici, mais il faut y penser on ne sait jamais
echo 'ERREUR id "'.$id.'" DUPLIQUE A CORRIGER';
}
}
ce code que tu dis "lourd" est correct au point de vu sécurité et des tests nécessaires, car execute() renvoie TRUE si UPDATE est fait => pas besoin de INSERT et FALSE si il y a une erreur PDO.
en comptant le nombre d'enregs modifiés, tu es sûr à 100% de ce que tu fais.
++
Personnellement j'ai créé une classe qui s'occupe de l'interface avec ma BD, je lui passe une requête à préparer, un tableau associatif de données et elle fait tout seule comme une grande
je ne vois pas où tu vois cette lourdeur.
- Edité par christouphe 20 janvier 2017 à 15:11:10
Par "lourd" je veux dire par rapport à ma proposition(qui parait peut être limité en matière de sécurité). Est -elle inefficace et quelles est sa limite?
1) les marqueurs ? imposent que les variables soient misent dans le tableau dans l'ordre,
2) tu testes true/false d'execute, mais pas le nombre de lignes sur lesquelles l'UPDATE a eu lieu => si 0 erreur si > 1 erreur et ton code ne teste pas cela.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales