Php 如何修复';外键约束失败';在mysql中

Php 如何修复';外键约束失败';在mysql中,php,mysql,Php,Mysql,我在PHP中设置了一个简单的CRUD,我在phpmyadmin中创建了两个表,一个用于个人信息(姓名、姓氏、电子邮件、电话),另一个用于其他电话号码。我在设置外键以连接两个表时遇到问题。额外的电话号码是在jQuery的帮助下从用户处动态添加的(可以调用或不调用,取决于用户是否有两个电话号码)。 有人能指出我犯错误的地方吗。 我对PHP的了解有限,我从phpmyadmin的GUI创建表和数据库,而不是使用代码 将添加的表单输入到数据库中的代码 // Checks if the submit but

我在PHP中设置了一个简单的CRUD,我在phpmyadmin中创建了两个表,一个用于个人信息(姓名、姓氏、电子邮件、电话),另一个用于其他电话号码。我在设置外键以连接两个表时遇到问题。额外的电话号码是在jQuery的帮助下从用户处动态添加的(可以调用或不调用,取决于用户是否有两个电话号码)。 有人能指出我犯错误的地方吗。 我对PHP的了解有限,我从phpmyadmin的GUI创建表和数据库,而不是使用代码

将添加的表单输入到数据库中的代码

// Checks if the submit button has been pressed, setst the variable values of the name values from the form
if (isset($_POST['submit'])){
  $first_name = $_POST['first_name'];
  $last_name = $_POST['last_name'];
  $email = $_POST['email'];
  $phone_number = $_POST['phone_number'];
$mysqli->query("INSERT INTO personal (first_name, last_name, email, phone_number) VALUES('$first_name', '$last_name', '$email', '$phone_number')")
      OR die($mysqli->error);
}
直到我输入外键时,它才起作用,输入外键后,我会得到错误。
无法添加或更新子行:外键约束失败(
exercise
phone
,约束
phone\u ibfk\u 1
外键(
user\u id
)引用
personal
user\u id

使用
$mysqli->insert\u id
获取在上一次查询中添加的用户的id,并将其用作
电话
表中的外键

if (isset($_POST['submit'])){
    $first_name = $_POST['first_name'];
    $last_name = $_POST['last_name'];
    $email = $_POST['email'];
    $phone_number = $_POST['phone_number'];
    $mysqli->query("INSERT INTO personal (first_name, last_name, email, phone_number) VALUES('$first_name', '$last_name', '$email', '$phone_number')")
        OR die($mysqli->error);
    $userid = $mysqli->insert_id;
// Checks if the Add more numbers button has been pressed
    if (isset($_POST['phone_number2'])) {
        $phone_number2 = $_POST['phone_number2'];
// foreach statement to loop trought the array of inserted additional phone numbers
        foreach ($phone_number2 as $key => $value) {
            $mysqli->query("INSERT INTO phone (userid, phone_number2) VALUES($userid, '$value')")
                OR die($mysqli->error);
        }
    }
}


使用
$mysqli->insert_id
获取在上一次查询中添加的用户的id,并将其用作
phone
表中的外键

if (isset($_POST['submit'])){
    $first_name = $_POST['first_name'];
    $last_name = $_POST['last_name'];
    $email = $_POST['email'];
    $phone_number = $_POST['phone_number'];
    $mysqli->query("INSERT INTO personal (first_name, last_name, email, phone_number) VALUES('$first_name', '$last_name', '$email', '$phone_number')")
        OR die($mysqli->error);
    $userid = $mysqli->insert_id;
// Checks if the Add more numbers button has been pressed
    if (isset($_POST['phone_number2'])) {
        $phone_number2 = $_POST['phone_number2'];
// foreach statement to loop trought the array of inserted additional phone numbers
        foreach ($phone_number2 as $key => $value) {
            $mysqli->query("INSERT INTO phone (userid, phone_number2) VALUES($userid, '$value')")
                OR die($mysqli->error);
        }
    }
}


警告:当使用
mysqli
时,您应该使用和向查询中添加任何数据。不要使用字符串插值或串联来完成此操作,因为您已经创建了严重的错误。切勿将
$\u POST
$\u GET
或任何类型的数据直接放入查询中,如果有人试图利用您的错误,这可能是非常有害的。您的
手机
表有一个
用户id
字段,该字段必须引用
个人
表中的
用户id
;当你在插入到
phone
表中时,它不会神奇地知道使用哪一个。你需要将
phone
中的键字段设置为
personal
first_name:=
Robert')中使用的键;落桌学生--
@spencer7593幸运的是,他没有调用
$mysqli->multi_query()
,因此不会删除任何内容。警告:在使用
mysqli
时,您应该使用和向查询中添加任何数据。不要使用字符串插值或串联来完成此操作,因为您已经创建了严重的错误。切勿将
$\u POST
$\u GET
或任何类型的数据直接放入查询中,如果有人试图利用您的错误,这可能是非常有害的。您的
手机
表有一个
用户id
字段,该字段必须引用
个人
表中的
用户id
;当你在插入到
phone
表中时,它不会神奇地知道使用哪一个。你需要将
phone
中的键字段设置为
personal
first_name:=
Robert')中使用的键;落桌学生--
@spencer7593幸运的是,他没有调用
$mysqli->multi_query()
,所以不会删除任何内容。