PHP MySQL: вставьте запись с полем для поиска, ссылающимся на себя, но не можете преодолеть ограничение внешнего ключа - PullRequest
0 голосов
/ 01 июня 2018

Итак, у меня есть таблица 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>

Цель состоит в том, чтобы выбрать материнскую компанию из поля поиска.Но я не могу понять, как вставить компании, у которых нет материнской компании (то есть parent_company = NULL).Я получаю сообщение об ошибке: Cannot add or update a child row: a foreign key constraint fails (chkdcrm.company, CONSTRAINT parent_company FOREIGN KEY (parent_company) REFERENCES company (company_id) ON DELETE SET NULL).

Я думаю, что проблема в том, что, поскольку company_id равен int , он не принимает значение NULL.Поэтому он рассматривается как недопустимая вставка.Но как я могу обойти эту проблему?Может кто-нибудь помочь мне?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...