Php 如何在同一事件中插入由外键连接的多个表

Php 如何在同一事件中插入由外键连接的多个表,php,mysql,Php,Mysql,我有两张桌子: 具有以下架构的候选\u注册表\u表: |----------------------------------------------------| | username | name | age | sex | password | |----------------------------------------------------| 具有以下架构的候选表 |---------------------------------------------

我有两张桌子:

具有以下架构的候选\u注册表\u表:

|----------------------------------------------------|
|   username  |  name   |  age   | sex   | password  |
|----------------------------------------------------|
具有以下架构的候选表

|--------------------------------------------------------|
|   username  |  religion   | caste  | address   | city  |
|--------------------------------------------------------|
在这两个表中,username是对应表中的主键

我想在一个单击事件中在两个表中插入数据,其中表candidate\u register\u表中的用户名也是candidate\u social\u表中的外键

这是我的reg_conn.php,在这里插入数据:

<?php
include('connection.php')'

$sql_register="INSERT INTO candidate_register_table (username, name, age, sex, password) )           VALUES('$_POST[username]','$_POST[name]','$_POST[age]', '$_POST[sex]','$_POST[password]')";
$sql_social_disable="ALTER TABLE candidate_social_table disable CONSTRAINT fk_candidate_register_table";
$sql_social="INSERT INTO candidate_social_table (username) VALUES('$_POST[username]')";
$sql_social_enable="ALTER TABLE candidate_social_table enable CONSTRAINT fk_candidate_register_table";

if(mysql_query($sql_register,$con) && mysql_query($sql_social_disable,$con) && mysql_query($sql_social,$con)  && mysql_query($sql_social_enable,$con))
   { echo "you have been registered";
   }
else
   {
       die('Error: ' . mysql_error());
       echo "Something went wrong. Might be a Fatal Error";
   }
?>
未得到执行,其抛出以下错误:

Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CONSTRAINT fk_t1' at line 1

我不确定您是否可以禁用单个表的约束,或者为什么您需要首先禁用外键,因为您正在以正确的顺序插入数据-但是您可以尝试:

$sql\u social\u disable=设置外键\u检查=0

要重新启用,请使用

$sql\u social\u disable=设置外键\u检查=1


或者,您可以删除特定的外键约束,然后在完成后重新创建它。

启用/禁用键的语法不正确。尝试:

ALTER TABLE `candidate_social_table` DISABLE KEYS;
或者,您可以在运行查询之前将“外键检查”设置为0。并在运行后重置为1

但是,我想知道为什么在插入候选表时要禁用外键。我的意思是外键有它的用途,禁用它们会使它失效。如果不需要外键,请删除它

如果您关心的是效率,那么在执行大容量插入时,外键通常被禁用。单个或少量插入不会产生任何影响

另一件事是,如果username是两个表中的主键,那么拥有两个表就没有意义了。您可以将所有字段从候选者\社会\表移动到候选者\注册\表


希望以上内容有意义

在你今天做任何其他事情之前,读一下这篇文章,我知道你想说什么,但你知道,我面临着这个问题,只有通过禁用和启用外键才能解决,我尝试了其他方法,但都失败了……所以这似乎是我问题的唯一解决办法……就你所说的在一张表中移动所有字段而言,实际上,我正在插入有关用户的注册、社交、个人、专业、联系人和一般信息,这些信息有单独的表。每个表有8个以上属性,而且我对所有这些部分使用不同的div。如果我将所有这些信息放在一个选项卡中,那么它将有50个以上属性50+属性根本没有问题。将所有信息放在一个表中的好处是不需要联接。
ALTER TABLE `candidate_social_table` DISABLE KEYS;