Sua
UPDATE cláusula está definindo o id_publisher coluna para NULL e, com base no nome da coluna e no erro que você está recebendo, que coluna é a PRIMARY KEY da tabela com uma configuração de unsigned NOT NULL . Por causa disso, quando você faz
id_publisher = NULL , o MySQL converte para id_publisher = 0 devido ao unsigned papel. Isso funcionará bem na primeira vez, no entanto, quando você executá-lo em uma segunda linha, agora você estará tentando inserir um segundo valor de chave primária de 0 , o que não é permitido. Com base na localização do
die() declaração em seu código de exemplo, estou assumindo que o seguinte bloco é o culpado: $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);
Aqui, seu
$id_publis variável está vazia ou nula. Sugiro remover o
id_publisher = NULL parte do UPDATE cláusula que é tão simples quanto remover 'id_publisher' => $id_publis, do $data1 array ou repense o motivo pelo qual você realmente precisa defini-lo como null para começar (neste caso, excluir a linha seria mais benéfico?)