Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
J'essaie, en vain, de faire une double requête d'insertion avec pour la 2éme la récupération de la clé primaire créer dans la 1ere requête.
Je m'explique avec un exemple:
<?php
$dbconnect=pg_connect("host=localhost dbname=Stanhome user=postgres password=.....");
$num_cli=$_POST['num_client'];
$total=$_POST['total_ht'];$insert_commandes="INSERT INTO commandes (num_com, total_com, num_pers) VALUES (DEFAULT,'".$total."','".$num_cli."') RETURNING num_com";
pg_query($dbconnect, $insert_commandes);
$insert_ok=true;
foreach($_POST['num_produit'] as $cle=>$numproduit){
$qteproduit = $_POST['qte_produit'][$cle];
$insert_composer="INSERT INTO composer VALUES ('".$qteproduit."', num_com,'".$numproduit."')";if(!$insert_composer) {$insert_ok=false;}
}
pg_query($dbconnect, $insert_composer);
if($insert_ok){
echo "Commande enregistrée";
}else{
echo "PB Commande non enregistrée";
}
?>
Donc l'idée, dans la première requête:
$insert_commandes="INSERT INTO commandes (num_com, total_com, num_pers) VALUES (DEFAULT,'".$total."','".$num_cli."') RETURNING num_com";
Je dois insérer ceci dans ma bdd et récupérer (avec RETURNING ???) la clé primaire auto-incrémenté' (avec le DEFAULT) pour ensuite l'insérer dans la 2éme requête:
Citation:
$insert_composer="INSERT INTO composer VALUES ('".$qteproduit."',ICI,'".$numproduit."')";
Hors comment faire cela ?
Merci de votre aide
Hors ligne
Voici un exemple de code qui fonctionne avec un RETURNING :
<?php
$dbconnect=pg_connect("dbname=b1");
$insert_commandes="INSERT INTO t1 (id) VALUES (DEFAULT), (DEFAULT), (DEFAULT) RETURNING id";
$rows = pg_query($dbconnect, $insert_commandes);
if (!$rows) {
echo "An error occured.\n";
exit;
}
while ($row = pg_fetch_array($rows)) {
echo $row['id'];
}
pg_close($dbconnect);
?>
Guillaume.
Hors ligne
Pour être plus explicite, il faut que vous récupériez le résultat du INSERT dans une variable et que vous l'utilisiez comme si vous aviez fait un bête SELECT. Tout simplement.
Guillaume.
Hors ligne
Donc si je fais
<?php
$dbconnect=pg_connect("host=localhost dbname=Stanhome user=postgres password=ifesuh2m");
$num_cli=$_POST['num_client'];
$total=$_POST['total_ht'];
$insert_commandes="INSERT INTO commandes (num_com, total_com, num_pers) VALUES (DEFAULT,'".$total."','".$num_cli."') RETURNING num_com"; // ?????$result=pg_query($dbconnect, $insert_commandes);
while ($row = pg_fetch_array($result)) {
echo $row['num_com'];
}
$insert_ok=true;
foreach($_POST['num_produit'] as $cle=>$numproduit){
$qteproduit = $_POST['qte_produit'][$cle];
$insert_composer="INSERT INTO composer VALUES ('".$qteproduit."', '".$row['num_com']."','".$numproduit."')";if(!$insert_composer) {$insert_ok=false;}
//}
}
pg_query($dbconnect, $insert_composer);
//message
if($insert_ok){
echo "Commande enregistrée";
}else{
echo "PB Commande non enregistrée";
}
?>
Cela fonctionne ? J'ai un peu de mal à comprendre l'idée là.
Hors ligne
Le echo $row['num_com']; mentionné par Guillaume était juste là pour vous montrer où la variable était récupérée. Dans votre code il n'est pas nécessaire de le laisser.
Vous devez juste faire un fetch et vous assurer qu'une ligne est bien récupérée, initialiser une variable avec $row['num_com'] et utiliser cette variable dans votre 2nd insert.
Dans votre exemple, cela ne devrait pas marcher car vous faîtes un while($row = pg_fetch_array()), et donc la variable $row doit être vide à la fin du while.
Dernière modification par rjuju (12/06/2012 23:39:09)
Julien.
https://rjuju.github.io/
Hors ligne
Corrigé merci
Hors ligne
Pages : 1