Błąd przy dodawaniu NULL do klucza obcego

0

Cześć,
tworzę prostą aplikację CRUD. Mam stworzoną prostą bazę maszyn (id, name, nr seryjny, właściciel). Ostatnie pole "właściciel" posiada klucz obcy. ID odpowiada nazwie z innej tabeli. Przy dodawaniu nowej maszyny, w tym właśnie właścicielu mam option z właścicielami pobieranymi z innej bazy i do tego domyślna wybrana wartość brak, której value to 0. I tu jest problem. Jeżeli dodaje nowy rekord z tym właśnie brakiem, wyskakuje mi taki błąd:

Warning: there was an error....Cannot add or update a child row: a foreign key constraint fails (materialdb.machines, CONSTRAINT machines_ibfk_1 FOREIGN KEY (owner) REFERENCES machines_owner (id)) in C:\xampp\htdocs\materialdb\proccess\machine-proccess.php on line 21

if ($_SERVER['REQUEST_METHOD'] == 'POST')
{


    

    if (!isset($_POST['mname']) ||!isset($_POST['mname-sn']) || !isset($_POST['mname-ewidence']) )
    {
        echo '<h1 class="display">' . "Niektóre pola muszą zostać wypełnione" . '</h1>';
    } else {
        
        $stmt = $conn->prepare("INSERT INTO machines (name, sr, er, owner) VALUES (?, ?, ?, ?)");

        $stmt->bind_param("sssi",$_POST['mname'] , $_POST['mname-sn'], $_POST['mname-ewidence'], $_POST['mname-owner']);

        if(!$stmt->execute()){trigger_error("there was an error....".$conn->error, E_USER_WARNING);}
        
        $stmt->close();

    }
}

?>

Zmienianie wartości na null również nie działa. Ręcznie dodanie maszyny z nullem w tym miejscu w PHPmyadmin działa poprawnie. Od kilku dni próbuje to naprawić, ale bezskutecznie.

Pozdrawiam

0

Upewniłeś się czy jak zakodujesz tego nulla, to ten null faktycznie leci do bazy?

Bo skoro masz tę kolumnę nullowalną, a dostajesz komunikat mówiący o tym, że próbujesz wstawić jako klucz obcy identyfikator nie istniejący w tabeli do której się odnosisz, to niemal pewne, że jednak coś z tym nullem w kodzie masz nie tak.

0
  1. Jaką masz budowę tabelek?
  2. Czy null jest dozwolony?
  3. Jeśli wartość domyślna to 0, a właściciel z takim ID nie istnieje, to się sypnie.
0

Po prostu weź sprawdzaj czy wysyłasz 0 jako ID właściciela, a jak tak, to zmień to na null.

1 użytkowników online, w tym zalogowanych: 0, gości: 1