-1

これらは私のテーブルです:

create table sender(
    sno varchar(6) not null,
    sfname varchar(15) not null,
    slname varchar(10) not null,
    sphone varchar(10),
    saddress varchar(40) not null,

    constraint pk_sender primary key(sno)
 );


create table courier(
    cno varchar(6),
    cost double precision not null,
    weight double precision not null,
    del_stat varchar(20) not null,
    no_cour int(10),
    sno varchar(6),

    constraint fk_courier foreign key(sno)
    references sender(sno),constraint pk_courier primary key(cno)
 );

そして、これは私のPHPコードです:

    <?php
session_start();
$_SESSION['x']=$_POST[sno];
$con=mysqli_connect("localhost","root","project123","project");
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }
$sql1="insert into sender(sno,sfname,slname,sphone,saddress) values (concat('SN','$_POST[sno]'),'$_POST[sf]','$_POST[sl]','$_POST[sph]','$_POST[sad]')";
$sql2="insert into courier(cno,cost,weight,del_stat,no_cour) values (concat('CN','$_POST[cno]'),'$_POST[cst]','$_POST[wght]','$_POST[del]','$_POST[num]')";

if(!mysqli_query($con,$sql1) && !mysqli_query($con,$sql2))
{
    die('Error: ' . mysqli_error($con));
}




mysqli_close($con);
?>

しかし、エラーが発生します エラー: 子行を追加または更新できません: 外部キー制約が失敗します ( project. courier, CONSTRAINT fk_courierFOREIGN KEY ( sno) REFERENCES sender( sno))

外部キーに値を挿入する方法を教えてください。

4

1 に答える 1

0

子テーブルの挿入に外部キーの値を設定していないようです。あなたのcourierテーブルには、右sno VARCHAR(6)を参照する列がありますか? sender.sno VARCHAR(6)そのため、価値を提供する必要があります。2 つのフィールドを外部キーとして関連付けるためには、親関連列に存在する子列に有効な値を設定する必要があります。

とにかく、次のようにこれら 2 つのクエリを実行する必要があります。

$sno = "SN$_POST[sno]";
$cno = "CN$_POST[cno]";

$sql1="insert into sender(sno,sfname,slname,sphone,saddress) values ('$sno','$_POST[sf]','$_POST[sl]','$_POST[sph]','$_POST[sad]')";

if(mysqli_query($con,$sql1))
{
    $sql2="insert into courier(cno,cost,weight,del_stat,no_cour, sno) values ('$cno','$_POST[cst]','$_POST[wght]','$_POST[del]','$_POST[num]', '$sno')";

    if (mysqli_query($con,$sql2))
    {
        // Success
    }
    else 
    {
        die('Error on query 2: ' . mysqli_error($con));
    }
}
else 
{
    die('Error on query 1: ' . mysqli_error($con));
}

ここで、最後に挿入された ID をフィールドから取得する方法を確認できauto_incrementます。フィールドを使用していない場合はauto_increment、必要に応じて別の方法で選択する必要があります。

これが役立つことを願っています。

UPDATE :これらの変数を変更snocnoました。これは、クエリ内での連結を避けることができるためです。そのようにすることができます。既にsno値を取得しているため、後で再度クエリを実行する必要はありません。そのコードが機能するようになりました。

于 2013-11-13T14:10:19.630 に答える