如何修复MySQL中的“外键约束失败”

时间:2019-04-16 16:55:13

标签: php mysql

我正在用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);
}
// 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 (phone_number2) VALUES('$value')")
               OR die($mysqli->error);
}
}

直到我输入外键为止,它一直有效,输入后我得到了错误。 无法添加或更新子行:外键约束失败(exercisephone,CONSTRAINT phone_ibfk_1外部键(user_id)参考personal({{ 1}}))

1 个答案:

答案 0 :(得分:0)

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