除非它们包含“where”或“like”子句,否则不允许删除

时间:2014-01-29 09:08:22

标签: php mysql codeigniter

我的查询 -

$shortlistpartners是数组

$this->db->delete('shortlist_partners');
$this->db->where('opp_id',$this->input->post('opp_id'));
$this->db->where_in('partner_id',$shortlistpartners);

除非包含“where”或“like”子句,否则不允许删除。 错误即将来临,告诉我任何解决方案。

2 个答案:

答案 0 :(得分:3)

实际上,CI delete()方法会在以下位置返回no where or limit错误:

来自 Source Code

if (count($this->ar_where) == 0 && count($this->ar_wherein) == 0 && count($this->ar_like) == 0)
{
    if ($this->db_debug)
    {
        return $this->display_error('db_del_must_use_where');
    }

    return FALSE;
}

所以我想你需要做的就是用删除电话交换你的小伙伴:

$this->db->where('opp_id',$this->input->post('opp_id'));
$this->db->where_in('partner_id',$shortlistpartners);
$this->db->delete('shortlist_partners');   

答案 1 :(得分:0)

您已启用--safe-updates,但不允许DELETE without WHERE

对于初学者,一个有用的启动选项是--safe-updates(或--i-am-a-dummy,具有相同的效果)。对于可能已发出DELETE FROM tbl_name语句但忘记了WHERE子句的情况很有用。通常,这样的语句会删除表中的所有行。使用--safe-updates,您只能通过指定标识它们的键值来删除行。这有助于防止事故发生。

看看MySQL Doc

快速修复是添加SET SQL_SAFE_UPDATES = 0;在您的查询之前:

SET SQL_SAFE_UPDATES=0; 

如果您需要删除表中的所有记录,请使用TRUNCATE TABLE_NAME;