【问题标题】:CodeIgniter Active Record: prevent duplicate on insertCodeIgniter Active Record:防止插入重复
【发布时间】:2012-06-27 04:47:54
【问题描述】:

我正在使用 SQLLite 中的一个简单用户表尝试 CodeIgniter,该表由 id、name、email 组成。

使用 Active Record 时如何防止重复插入?

我尝试了以下方法,但它只是不断创建重复...

$data = array(
  'email' => 'd@d.com' ,
  'name' => 'dave' 
);

$this->db->where('users.email != ', 'd@d.com');
$this->db->insert('users', $data); 

【问题讨论】:

    标签: codeigniter activerecord


    【解决方案1】:

    如前所述添加 UNIQUE INDEX 以确保完全安全。

    那么你可以...做这样的事情:

    $email = 'd@d.com';
    $name = 'dave';
    
    $this->db->query("
    INSERT INTO users VALUES (email, name)
    SELECT email, name
    FROM (SELECT ? AS email, ? AS name) AS h
    HAVING ! (SELECT COUNT(*) FROM users WHERE email = h.email)
    ", array($email, $name));
    

    【讨论】:

    • 不高兴。只需得到以下内容:致命错误:在 C:\htdocs\CodeIgniter\system\database\drivers\pdo\pdo_driver.php 第 193 行的非对象上调用成员函数 execute()
    • 其他人有这个问题吗?
    • 我首先意识到你没有使用 MySQL。因此,此查询可能无法完全正常工作,抱歉。添加 INDEX 后,您可以尝试在上面进行修改以使用 INSERT IGNORE ...VALUES (...) 而不是 SELECT
    猜你喜欢
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    • 2015-08-07
    • 2011-09-15
    • 2012-03-24
    • 2016-02-19
    • 2012-08-30
    • 1970-01-01
    相关资源
    最近更新 更多