PHP MySQL:插入带有自引用查找字段的记录,但可以';无法通过外键约束

PHP MySQL:插入带有自引用查找字段的记录,但可以';无法通过外键约束,php,mysql,mysqli,Php,Mysql,Mysqli,因此,我将表company定义如下: CREATE TABLE IF NOT EXISTS chkdcrm.company ( company_id INT(11) NOT NULL AUTO_INCREMENT, name_de VARCHAR(150) NOT NULL, parent_company INT(11) NULL, PRIMARY KEY (company_id), CONSTRAINT parent_company FOREIGN KEY (par

因此,我将表company定义如下:

CREATE TABLE IF NOT EXISTS chkdcrm.company (
  company_id INT(11) NOT NULL AUTO_INCREMENT,
  name_de VARCHAR(150) NOT NULL,
  parent_company INT(11) NULL,
  PRIMARY KEY (company_id),
  CONSTRAINT parent_company
    FOREIGN KEY (parent_company)
    REFERENCES chkdcrm.company (company_id)
    ON DELETE SET NULL)
ENGINE = InnoDB;
对于HTML表单,我有:

<?php
  $require_once '../conn.php';
  //...
  $parent_company="";
  if($_SERVER["REQUEST_METHOD"] == "POST"){
    //codes...
  if ($_POST["parent_company"] == '') {
      $parent_company = 'NULL'; 
    }
    else {
      $parent_company = $_POST["parent_company"];
    }

  $sql = "INSERT INTO company (name_de, parent_company) VALUES (?, ?)";
  if($stmt = mysqli_prepare($conn, $sql)){
    mysqli_stmt_bind_param($stmt, 'si', $param_name, $param_parent);
    $param_name = $name_de;
    $param_parent = $parent_company;
    mysqli_stmt_execute($stmt) or die(mysqli_error($conn));
    $company_id = mysqli_insert_id($conn);
    mysqli_stmt_close($stmt);
    mysqli_close($conn);
}
?>

//HTML表单

  <div class="form-group">
    <label>Parent company(if exists)</label>
    <br>
    <?php
      echo '<select name="parent_company">';
      echo '<option value=""></option>';
      $result = mysqli_query($conn, "SELECT company_id, name_de FROM company ORDER BY name_de ASC");
      while ($row = mysqli_fetch_assoc($result)){
        echo '<option value = "'.$row['company_id'].'">'.$row['name_de'].'</option>';
      }
      echo '</select>';
     ?>
  </div>

母公司(如有)


也许建立一个“幽灵”母公司,并为没有母公司的公司添加它?@Mickelleger这对HTML显示有效,但数据库仍然会显示它有一个母公司,它引用了“幽灵”母公司…好吧,为了保持逻辑,当你想显示所有公司时,添加一个where条件以不选择它!但也许有更好的东西可以肯定:)