簡體   English   中英

Codeigniter:活動記錄插入唯一值

[英]Codeigniter: Active Records Insert Unique values

我正在從Google API導入GMail聯系人,只想將唯一的電子郵件ID保存到數據庫中。 是否可以使用codeigniter的Active Record插入唯一記錄? CodeIgniter是否提供開箱即用的功能?
如果我使列唯一,則查詢將拋出異常。 在深入研究文檔后,我了解CodeIgniter不提供try catch塊。

您的電子郵件字段必須在表索引中是唯一的。

$query_string = $this->db->insert_string('table', $data);
$query_string = str_replace('INSERT INTO', 'INSERT IGNORE INTO', $query_string);

$req = $this->db->query($query_string);

if($req->affected_rows() == 1) {
   //data inserted
} else {
   //email exists already
}

如果使用IGNORE關鍵字,則執行INSERT語句時發生的錯誤將被視為警告。 例如,如果沒有IGNORE,則復制表中現有UNIQUE索引或PRIMARY KEY值的行會導致重復鍵錯誤,並且語句將中止。 使用IGNORE時,仍未插入行,但未發出錯誤。 如果未指定IGNORE,則會觸發錯誤的數據轉換會中止語句。 使用IGNORE,將無效值調整為最接近的值並插入; 產生警告,但聲明不會中止。

MySQL INSERT語法

CI數據庫助手

您可以創建一個基本模型(application / core / MY_Model.php)並實現一個save函數,以便在new和update(如果存在)時插入。 從中擴展您的模型。

這是http://thephpcode.com/blog/codeigniter/a-smart-codeigniter-model的摘錄

public function save($data,$tablename="")
{
if($tablename=="")
{
    $tablename = $this->table;
}
$op = 'update';
$keyExists = FALSE;
$fields = $this->db->field_data($tablename);
foreach ($fields as $field)
{
    if($field->primary_key==1)
    {
        $keyExists = TRUE;
        if(isset($data[$field->name]))
        {
            $this->db->where($field->name, $data[$field->name]);
        }
        else
        {
            $op = 'insert';
        }
    }
}

if($keyExists && $op=='update')
{
    $this->db->set($data);
    $this->db->update($tablename);
    if($this->db->affected_rows()==1)
    {
        return $this->db->affected_rows();
    }
}

$this->db->insert($tablename,$data);

return $this->db->affected_rows();

}

如果您的數據來自from,則CI提供了一個form_validation類,可以在服務器端驗證您的表單。通過form_validation有一個名為is_unique的規則,它檢查數據庫中是否已存在給定值。 你可以在這里看到一個完整而清晰的解釋

或者,您可以在將該電子郵件插入該unqiue列之前手動進行檢查。

$this->db->select('email');
$this->db->where(array('email'=>$email));
$query = $this->db->get('yourtable');
if($query->num_rows() > 0){
    // the query returned data, so the email already exist.
}else{
    // the email not exists, so you can insert it.
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM