【问题标题】:Can't insert values to foreign key attribute in php无法在php中向外键属性插入值
【发布时间】:2013-11-26 03:59:00
【问题描述】:

这些是我的桌子:

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_courier FOREIGN KEY (sno) REFERENCES sender (sno))

所以请告诉我如何将值插入外键。

【问题讨论】:

标签: php mysql sql


【解决方案1】:

您似乎没有在子表插入上设置外键值。您的 courier 表有一个列 sno VARCHAR(6) 引用 sender.sno VARCHAR(6) 对吗?所以你必须为它提供价值。为了将两个字段关联为外键,您必须为存在于父相关列上的子列设置一个有效值。

无论如何,您应该像这样运行这两个查询:

$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));
}

您可以看到here 如何从auto_increment 字段中获取最后插入的ID。如果您没有使用 auto_increment 字段,则必须以适合您需要的其他方式选择它。

我希望这会有所帮助。

更新:我已经更改了这些变量 snocno,因为您可以避免在查询中连接它们。你可以那样做。我意识到您已经拥有 sno 值,因此您无需在此之后再次查询。该代码现在可以工作了。

【讨论】:

  • 但它显示一个错误:警告:extract() 期望参数 1 是数组,布尔值在 C:\xamp1\htdocs\DB-UX\new1.php 第 15 行给出警告:mysql_fetch_assoc( ) 期望参数 1 是资源,在第 15 行的 C:\xamp1\htdocs\DB-UX\new1.php 中给出 null 查询 2 错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 ')' 附近使用正确的语法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-09
  • 2018-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多