首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >外键无法在子表中添加行,尽管处理的事情很明显。

问外键无法在子表中添加行,尽管处理的事情很明显。
EN

Stack Overflow用户
提问于 2015-10-14 10:55:43
回答 1查看 128关注 0票数 0

以下代码(reg_org.php)用于注册:

代码语言:javascript
复制
<?php
session_start();
if(!empty($_POST))
{
    $msg="";

    if(empty($_POST['org_name']) || empty($_POST['org_domain']) || empty($_POST['org_admin_name']) || empty($_POST['org_admin_email']) || empty($_POST['org_admin_pass1']) || empty($_POST['org_admin_pass2']))
    {
        $msg.="<li>Please full fill all requirement";
    }

    if($_POST['org_admin_pass1']!=$_POST['org_admin_pass2'])
    {
        $msg.="<li>Please Enter your Password Again.....";
    }

    if(!ereg("^[a-z0-9_]+[a-z0-9_.]*@[a-z0-9_-]+[a-z0-9_.-]*\.[a-z]{2,5}$",$_POST['org_admin_email']))
    {
        $msg.="<li>Please Enter Your Valid Email Address...";
    }


    if(strlen($_POST['org_admin_pass1'])>20)
    {
        $msg.="<li>Please Enter Your Password in limited Format....";
    }

    if(is_numeric($_POST['org_name']) || is_numeric($_POST['org_admin_pass1']))
    {
        $msg.="<li>Names must be in String Format...";
    }

    if($msg!="")
    {
        header("location:index.php?error=".$msg);
    }
    else
    {
  $orgname = $_POST['org_name'];
  $orgdmn = $_POST['org_domain'];
  $orgadmin = $_POST['org_admin_name'];
  $orgadminmail = $_POST['org_admin_email'];
  $orgadminpass = $_POST['org_admin_pass1'];
  $link=mysql_connect("localhost","root","")or die("Can't Connect...");

            mysql_select_db("educon",$link) or die("Can't Connect to Database...");
                $query="insert into institutes(inst_nm,inst_dmn)
            values('$orgname','$orgdmn')";
                $res = mysql_query($query,$link) or die("Can't Execute Query... ".mysql_error());
      $query="insert into users(u_name,u_pwd,u_email,u_type)
            values('$orgadmin','$orgadminpass','$orgadminmail','admin')";
      $res = mysql_query($query,$link) or die("Can't Execute Query... ".mysql_error());
                $_SESSION=array();
                $_SESSION['unm']=$orgadmin;
                $_SESSION['type']="admin";
                $_SESSION['status']=true;
                header('location:profile_admin.php');
}
}
else
{
    header("location:index.php");
}
?>

在代码中,根据规则,在子表(用户)之前创建父表(研究所),子列与父列相同,但我面临以下问题:

不能执行查询。无法添加或更新子行:外键约束失败(educon.users、constraint users_ibfk_1 REFERENCES (inst_id)引用institutes (inst_id)在更新级联上的删除级联)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-31 23:27:00

INSERT INTO users语句没有为inst_id列提供值。当该语句运行时,将为inst_id列分配该列的默认值(声明为表中列定义的一部分)。默认值也可以被“前插入”触发器中的赋值覆盖。

MySQL错误指示插入到users表中的行具有inst_id的值,该值在引用(父) institutes表中的institutes表中不存在。

如果要引用刚才插入到institutes表中的行,则需要检索刚刚插入的行的inst_id列的值。

如果inst_id in institutes是一个AUTO_INCREMENT列,那么在INSERT INTO institutes语句之后,您可以检索指定的值。有几种机制可以做到这一点。MySQL提供LAST_INSERT_ID()函数..。

last-insert-id

PHP库提供自己的函数,以便更容易地访问该函数返回的值。

不推荐的mysql_扩展

http://php.net/manual/en/function.mysql-insert-id.php

(请注意有关使用mysqli或PDO而不是扩展的文档中的警告。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33123486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档