0

そこにSQLを使用してCIの1つの実行でオプション更新3テーブルを作成しようとしましたが、それでもエラーが発生するのはなぜですか?

これはエラー警告です:

A Database Error Occurred

Error Number: 1062

Duplicate entry '0' for key 1

UPDATE `t_publisher` SET `id_publisher` = NULL, `publisher` = NULL, `artis` = NULL, `id_label` = NULL WHERE `id_publisher` = '113'

これはコードです:

function update($id_user=null)
  {
   if (($this->input->post('submit') == 'Update')){
    $user=$this->input->post('username');
    $pass=$this->input->post('userpassword');
    $ussta=$this->input->post('userstatus');
    $usty=$this->input->post('usertype');

   $data = array(
    'user_name' => $user,
    'user_pass' => $pass,
    'user_status' => $ussta,
    'user_type' => $usty);

    $this->db->where('user_id', $this->input->post('id'), $data);
    $this->db->update("t_user",$data);

   $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);
    echo $this->db->last_query();
    die();

   $data2 = array(
    'id_label' => $id_lab,
    'label' => $label);

    $this->db->where('id_label', $this->input->post('id'), $data);
    $this->db->update("t_label",$data2);
    echo $this->db->last_query();
    die();
    redirect("registrasi/reg");
   }
    $var['data'] = $this->db->query("select * from t_user where USER_ID= '$id_user'")->row_array();  
    $var1['data'] = $this->db->query("select * from t_publisher where id_publisher = '$id_publis'")->row_array();
    $var2['data'] = $this->db->query("select * from t_label where id_label = '$id_lab'")->row_array();
    $this->load->view('update', $var,$var1,$var2);
}

私のコードはどうしたの?助けてください。前に感謝します。

4

1 に答える 1

2

UPDATEid_publisher列をNULLに設定しています。列の名前と受け取ったエラーに基づいて、その列はテーブルのPRIMARY KEY設定がunsigned NOT NULLです。

このため、 を行うと、MySQLは部分的に にid_publisher = NULL変換します。これは最初は正常に実行されますが、2 番目の行で実行すると、許可されていないの2 番目の主キー値を挿入しようとします。id_publisher = 0unsigned0

サンプル コード内のステートメントの場所に基づいてdie()、次のブロックが原因であると想定しています。

   $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);

ここで、$id_publis変数は空または null です。

配列から削除するのと同じくらい簡単な句id_publisher = NULLからその部分を削除するか、最初に実際に設定する必要がある理由を再考することをお勧めします (この場合、行を削除する方がより有益でしょうか?)UPDATE'id_publisher' => $id_publis,$data1null

于 2012-11-12T03:25:28.863 に答える