Php 外键无法在子表中添加行,尽管显然需要处理一些事情
以下代码reg_org.php用于注册:Php 外键无法在子表中添加行,尽管显然需要处理一些事情,php,mysql,Php,Mysql,以下代码reg_org.php用于注册: <?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'
<?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\u ibfk\u 1外键inst\u id在更新级联的删除级联上引用institutes inst\u id
INSERT INTO users语句没有为inst_id列提供值。当该语句运行时,inst_id列将为表中声明为列定义一部分的列指定默认值。默认值也可以由插入前触发器中的赋值覆盖
MySQL错误表示插入到users表中的行具有inst_id值,该值在引用的父表中的exist中不存在
如果要引用刚插入institutes表的行,则需要检索刚插入的行的inst_id列的值
如果institutes中的inst_id是一个自动增量列,那么在INSERT INTO institutes语句之后,可以立即检索分配的值。有几种机制可以做到这一点。MySQL提供了最后一个插入ID函数
PHP MySQL库提供自己的函数,以便更轻松地访问此函数返回的值
不推荐使用的mysql扩展
请注意文档中关于使用mysqli或PDO而不是mysql扩展名的警告。很抱歉,父表中的行是在子表之前的父表中创建的!而不是在子表之前创建的父表。