Vaše UPDATE klauzule nastavuje id_publisher sloupec na NULL a na základě názvu sloupce a chyby, která se vám zobrazuje, to sloupec je PRIMARY KEY tabulky s nastavením unsigned NOT NULL .
Z tohoto důvodu, když uděláte id_publisher = NULL , MySQL jej převede na id_publisher = 0 kvůli unsigned část. Toto se provede v pořádku poprvé, ale když jej spustíte na druhém řádku, budete se nyní pokoušet vložit druhý hodnota primárního klíče 0 , což není povoleno.
Na základě umístění die() ve vašem ukázkovém kódu, předpokládám, že viníkem je následující blok:
$data1 = array(
'id_publisher' => $id_publis,
'publisher' => $publis,
'artis' => $ar,
'id_label' => $id_lab);
$this->db->where('id_publisher', $this->input->post('id'), $data);
$this->db->update("t_publisher",$data1);
Zde je vaše $id_publis proměnná je buď prázdná, nebo null.
Navrhoval bych buď odstranit id_publisher = NULL část z UPDATE klauzule, která je stejně jednoduchá jako odstranění 'id_publisher' => $id_publis, z $data1 pole nebo přehodnoťte důvod, proč jej vlastně potřebujete nastavit na null pro začátek (bylo by v tomto případě smazání řádku výhodnější?)