2012-11-12 62 views
0

我試圖讓選項更新三個表與一個執行爲我的配置文件與sql那裏,但爲什麼它仍然錯誤?發生數據庫錯誤錯誤編號:1062

這是錯誤的警告:

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

什麼錯我的代碼?請幫忙。以前感謝。

+0

您應該發佈CREATE TABLE語句。 –

+0

你有沒有設置你的主鍵爲自動增量 –

+0

親愛的克里斯亨利,爲什麼創建表? || 親愛的羅謝爾山,是啊我把它設置爲自動增量 – user1781895

回答

2

UPDATE子句的id_publisher列設置爲NULL,並基於列的名稱,您收到錯誤,列是表的PRIMARY KEYunsigned NOT NULL的設置。

因此,當您做id_publisher = NULL時,由於unsigned部分的原因,MySQL會將其轉換爲id_publisher = 0。這將在第一次運行良好,但是,當您在第二行運行它時,您現在將嘗試插入第二個主鍵值0,這是不允許的。

基礎上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變量爲空或空。

我建議要麼刪除從UPDATE子句id_publisher = NULL部分是從$data1陣列移除'id_publisher' => $id_publis,一樣簡單,或重新考慮你的實際需要將其設置爲null開始與(在這種情況下,將原因刪除該行更有利嗎?)

+0

親愛的newfurniturey,所以,我只需要刪除'id_publisher'=> $ id_publis?因爲當我點擊PK選項時,它沒有改變。但是,如果我刪除'id_publisher'=> $ id_publis,它包含錯誤UPDATE't_publisher' SET'publisher' = NULL,'artis' = NULL,'id_label' = NULL WHERE'id_publisher' = 0 – user1781895

+0

@ user1781895什麼是新查詢中的實際錯誤?它看起來像'WHERE'子句是'id_publisher = 0',這意味着你正在編輯之前錯誤的行之一,但是,我不確定你的確切的錯誤是在這種情況下,通過閱讀查詢。 – newfurniturey

+0

UPDATE't_publisher' SET'publisher' = NULL,'artis' = NULL,'id_label' = NULL WHERE'id_publisher' ='19'||但t_user中的字段用戶名正在改變 – user1781895