2011-03-28 66 views
0

我正在使用apache,php,mysql和代碼點火器,並設置了數據庫。在數據庫中,我有兩列需要在組合中唯一:緯度和經度。快速檢查或添加到數據庫

所以我設置使用此調用數據庫:

alter table pano_raw add unique index(lat, lng) 

現在,當我值插入兩列(緯度和經度)如果值是一樣的,數據庫應拒絕寫正確嗎?

function addNewSet($data) 
{ 
    $this->db->insert('sets', $data); 
} 

這個函數應該返回true或false,取決於讀取或寫入的成功是否正確?

那麼現在如何改變它,以便它何時返回插入記錄的row_id或返回FALSE?如果寫入工作,我需要row_id,如果沒有,我需要FALSE,所以我可以改變調用這個函數的代碼。

會這樣嗎?我不這麼認爲。想法?

function addNewSet($data) 
{ 
    $this->db->insert('sets', $data); 
    return $this->db->insert_id(); 
} 
+1

我注意到你的sql引用了表'pano_raw',但你的CI查詢引用表'sets'。這是一個錯誤嗎?或者他們是2張不同的桌子? – icchanobot 2011-03-28 08:23:38

回答

1

默認情況下,它不會返回false,它在返回false之前會有數據庫錯誤。

如果你真的想這樣,你需要去application/config/database.php並更改設置爲false $db['default']['db_debug'] = FALSE;

那麼你應該能夠做到這一點(假設你的表有一個ID字段設置爲自動增量)

function addNewSet($data) { 
    if ($this->db->insert('sets', $data)) { 
      return $this->db->insert_id(); 
    } else { 
      return FALSE; 
    } 
} 
0

試試這個:

function addNewSet($data) 
{ 
    $result = $this->db->insert('sets', $data); 
    if ($result) 
     return $this->db->insert_id(); 
    return false; 
} 
0

您可以使用$this->db->affected_rows();插入數據後,可以檢查是否添加任何記錄(或影響)。

所以

function addNewSet($data) 
{ 
    $this->db->insert('sets', $data); 

    if($this->db->affected_rows()==1) 
    { 
     return $this->db->insert_id(); 
    } 
    else 
    { 
     return false; // nothing was added! 
    } 
} 

應該這樣做(未經測試)。