1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
/**
* insertion d'un objet Contact dans la base de données + met à jour l'objet en argument en lui spécifiant un identifiant.
* @param de type Contact dans une variable $contact passé par référence.
* return bool true si l'objet a été inséré, false si erreur survient
*/
public function create(Contact &$contact)
{
$this->pdoStatement = $this->pdo->prepare('INSERT INTO contact VALUES (NULL, :nom, :prenom, :tel, :mel)'); // cela marche bien mais ne contrôle pas ce que je veux
/* .... cette requete avec du code en procédural marche très bien
$req = $bdd->prepare('INSERT INTO contact(nom, prenom, tel, mel) SELECT :nom, :prenom, :tel, :mel FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM contact WHERE nom=:nom AND prenom=:prenom and tel=:tel)');*/
// j'ai essayé d'adapter cette requete mais bien sur cela ne marche pas.....
/* $this->pdoStatement = $this->pdo->prepare('INSERT INTO contact VALUES (NULL, :nom, :prenom, :tel, :mel) SELECT :nom, :prenom, :tel, :mel FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM contact WHERE nom=:nom AND prenom=:prenom and tel=:tel)');*/
// on lie les variables et on utilise les getters pour obtenir les données
$this->pdoStatement->bindValue(':nom', $contact->getNom(), PDO::PARAM_STR);
$this->pdoStatement->bindValue(':prenom', $contact->getPrenom(), PDO::PARAM_STR);
$this->pdoStatement->bindValue(':tel', $contact->getTel(), PDO::PARAM_STR);
$this->pdoStatement->bindValue(':mel', $contact->getMel(), PDO::PARAM_STR);
//execute la requete préparée et on recupére l'objet pour pouvoir le tester
$executeIsOK = $this->pdoStatement->execute();
$count = $this->pdoStatement->rowCount();
// juste pour contrôler pour moi
if($count>1)
{
print("Ce contact existe déjà"); // => refuser l'enregistrement dans la base de données
}
else {
print("ok pour l'enregistrement"); // autoriser enregistrement dans la base de données
}
// on teste le retour de la requete conformément à la documentation ci-dessus : true = si tout s'est bien passé ou false s'il y a une erreure
if(!$executeIsOK)
{
return false;
}
else
{
// pour la mise à jour de l'insertion
$id = $this->pdo->lastInsertId(); // on récupère l'identifiant de l'objet créé
$contact = $this->read($id); // affectation de l'id à l'objet créé
return true;
}
} |
Partager