dongli9894 2014-03-17 16:46
浏览 42
已采纳

Codeigniter删除记录失败

I am attempting to run the following query in CodeIgniter:

DELETE FROM TblOrders 
WHERE 
TblOrders.orderPaid = 0 
AND 
TblOrders.orderStarted < '02/15/2014' 
AND 
(Select Top 1 paymentID From TblOrderPayments Where TblOrderPayments.orderID = TblOrders.orderID) Is NULL

Works perfect in MS SQL Manager.

However, the following code fails:

public function clearup(){
    $this->db->where('TblOrders.orderPaid', 0);
    $this->db->where('TblOrders.orderStarted <', date('m/d/Y', strtotime('-30 days')));
    $this->db->where('(Select Top 1 paymentID From TblOrderPayments Where TblOrderPayments.orderID = TblOrders.orderID) Is NULL', null);
    $this->db->delete('TblOrders');
    var_dump($this->db->last_query());
    exit;
    if($this->db->affected_rows() > 0){
        $this->session->set_userdata(array('okMsg'=>'Your old un-paid orders have been removed from the system.'));
        redirect('/orders/current', 'refresh');
    }else{
        $this->session->set_userdata(array('errMsg'=>'There was an issue clearing out your old orders.'));
        redirect('/orders/current', 'refresh');
    }
}

With the following error:

DELETE failed because the following SET options have incorrect settings: 'ANSI_NULLS, QUOTED_IDENTIFIER, CONCAT_NULL_YIELDS_NULL, ANSI_WARNINGS, ANSI_PADDING'. Verify that SET options are correct for use with indexed views and/or indexes on computed columns and/or filtered indexes and/or query notifications and/or XML data type methods and/or spatial index operations.

DELETE FROM TblOrders WHERE TblOrders.orderPaid = 0 AND TblOrders.orderStarted < '02/15/2014' AND (Select Top 1 paymentID From TblOrderPayments Where TblOrderPayments.orderID = TblOrders.orderID) Is NULL

Filename: /media/ServerStorage/Sites/tk.admin/models/orders_m.php

As you can see here, the query this error is reporting is the same query run in MS SQL Manager...

What can I do to get it to work in my CodeIgniter code?

  • 写回答

2条回答 默认 最新

  • dongmeng4742 2014-03-17 18:21
    关注

    Try

    $this->db->query('SET ANSI_NULLS ON');
    $this->db->query('SET QUOTED_IDENTIFIER ON');
    $this->db->query('SET CONCAT_NULL_YIELDS_NULL ON'); 
    $this->db->query('SET ANSI_WARNINGS ON');
    $this->db->query('SET ANSI_PADDING ON');
    

    before interacting with the db:

    $this->db->query('SET ANSI_NULLS ON');
    $this->db->query('SET QUOTED_IDENTIFIER ON');
    $this->db->query('SET CONCAT_NULL_YIELDS_NULL ON'); 
    $this->db->query('SET ANSI_WARNINGS ON');
    $this->db->query('SET ANSI_PADDING ON');
    $this->db->where('TblOrders.orderPaid', 0);
    $this->db->where('TblOrders.orderStarted <', date('m/d/Y', strtotime('-30 days')));
    $this->db->where('(Select Top 1 paymentID From TblOrderPayments Where TblOrderPayments.orderID = TblOrders.orderID) Is NULL', null);
    $this->db->delete('TblOrders');
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料