【问题标题】:Deletes are not allowed unless they contain a "where" or "like" clause除非包含“where”或“like”子句,否则不允许删除
【发布时间】:2014-01-29 09:08:21
【问题描述】:

我的查询-

$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”子句,否则不允许删除。 错误来了,告诉我任何解决方案。

【问题讨论】:

  • 您遇到的错误是什么?

标签: php mysql codeigniter


【解决方案1】:

实际上,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;
}

所以我想你需要做的就是用 delete 调用交换你的 where:

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

【讨论】:

【解决方案2】:

您启用了--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;

【讨论】:

    猜你喜欢
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多