2011-03-28 41 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! 
    } 
} 

应该这样做(未经测试)。