PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 18/06/2013 09:51:18

Ecriture de données avec PHP et clés étrangères

Bonjour,


Je travaille sur la création d'une base de données qui sera alimentée par des formulaires HTML/CSS avec du PHP pour la récupération des informations saisies et l'écriture dans la base (classique, j'imagine). Je m'interroge sur la gestion des clés étrangères. Un exemple simple avec les tables suivantes :


- intervention (int_id, int_date, int_type)

- agent (age_id, age_prenom, age_nom)

- intervention_agent (int_id, age_id)


La table intervention_agent stocke les correspondances entre les tables intervention et agent car il peut y avoir plusieurs agents pour une même intervention.


En PHP, je procède de la manière suivante (volontairement simplifiée mais c'est pour le principe) :


1. Récupération des informations saisies dans des variables

$date = $_POST['date'];
$type = $_POST['type'];
$prenom = $_POST['prenom'];
$nom = $_POST['nom'];

2. Requêtes d'écriture des informations dans les tables :

$rqt_intervention = $bdd->prepare('INSERT INTO intervention (int_id, int_date, int_type) VALUES ('', '$date', '$type');');
$rqt_intervention->execute();

$rqt_intervention_agent = $bdd->prepare('INSERT INTO intervention_agent (int_id, age_id) VALUES ( ??? );');
$rqt_intervention_agent->execute();

Comment se gère l'écriture des clés étrangères dans la table intervention_agent ? En effet, j'ai bien paramétré les champs int_id et age_id comme clés primaires dans PostgreSQL, donc mes requêtes d'écriture laissent vides ces champs qui seront automatiquement numérotés à la suite par PostgreSQL lors de l'écriture. Mais quelles valeurs dois-je indiquer dans ma requête d'écriture dans la table intervention_agent (cf. mes points d'interrogation dans la dernière requête ci-dessus) ? Là, je ne vois pas bien comment ça se passe, sur le principe...


Merci par avance pour votre aide !


Thomas

Hors ligne

#2 18/06/2013 16:47:34

Re : Ecriture de données avec PHP et clés étrangères

Re,


Après une journée de recherches, impossible de mettre le doigt sur un cas d'école... Et pourtant, ça doit être une situation courante. Je tourne autour du pot avec la clause RETURNING [ colonne ] qui permet à une instruction SELECT / INSERT de renvoyer la valeur serial affectée par le SGBD. Mais je ne vois pas comment gérer ça en PHP...


Si je reprends mon exemple du premier message, je peux avoir plusieurs agents pour une même intervention. Cela signifie que la création d'une ligne dans la table intervention peut impliquer la création de plusieurs lignes dans la table intervention_agent...


Si quelqu'un a une idée, vraiment je suis en galère !


Merci !


Thomas

Hors ligne

#3 18/06/2013 17:02:49

rjuju
Administrateur

Re : Ecriture de données avec PHP et clés étrangères

Bonjour,

je pense que vous faîtes une confusion entre une clé primaire et un champ qui s'incrémente automatiquement. Vous avez du utiliser un type «serial» ou «bigserial» pour ce champs, ce qui implique la création d'une séquence.


Donc si vous voulez affecter plusieurs agents à une intervention, il faudra récupérer la valeur renvoyée par le INSERT ... RETURNING..., et boucler sur la liste de vos agent, ou idéalement générer une seule requête. Vous pouvez également manipuler la séquence à la main si vous le préférez ( fonction nextval('nom_sequence'), voir http://docs.postgresql.fr/9.2/functions-sequence.html).

Hors ligne

#4 18/06/2013 19:59:33

MitsuTomoe
Membre

Re : Ecriture de données avec PHP et clés étrangères

Bonjour,
un exemple  :

$sql = "insert into licencie(id_licencie,id_identite,qualif_cartet,diplome,discipline)
values(default,$identiter,'$carte_pro','$diplome','$discipline')returning id_licencie";
$result = pg_query($db, $sql);
 if (!$result) {
             die("Erreur SQL: " . pg_last_error());
   }
$ligne = pg_fetch_row($result);
$id_licencie = $ligne[0];

Alex

Hors ligne

Pied de page des forums