Din UPDATE klausulen indstiller id_publisher kolonne til NULL , og baseret på navnet på kolonnen og den fejl, du modtager, at kolonne er tabellens PRIMARY KEY med en indstilling på unsigned NOT NULL .
På grund af dette, når du gør id_publisher = NULL , MySQL konverterer det til id_publisher = 0 på grund af den unsigned en del. Dette vil fungere fint første gang, men når du kører det på en anden række, vil du nu forsøge at indsætte et sekund primærnøgleværdien 0 , hvilket ikke er tilladt.
Baseret på placeringen af die() sætning i din eksempelkode, antager jeg, at følgende blok er synderen:
$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);
Her er din $id_publis variabel er enten tom eller null.
Jeg vil foreslå enten at fjerne id_publisher = NULL del fra UPDATE klausul, som er så simpel som at fjerne 'id_publisher' => $id_publis, fra $data1 array, eller genovervej årsagen til, at du faktisk skal indstille den til null til at begynde med (vil det i dette tilfælde være mere fordelagtigt at slette rækken?)