Где условие сразу после или условие не работает в codeigniter - PullRequest
0 голосов
/ 11 сентября 2018

Когда я использую только одно условие OR из условий 3 OR, предложение where не работает.

 $this->db->where('(delivery_date BETWEEN "'.$from.'" AND "'.$to.'") ');
    $this->db->or_where('order_date BETWEEN "'.$odfrom.'" AND "'.$odto.'"');
     $this->db->or_where('mumbai_date BETWEEN "'.$mdfrom.'" AND "'.$mdto.'"');
    $this->db->where('order_location',$sess_location);
    $this->db->where('designer_id',$sess_designer_id);
    $this->db->where('is_deleted=',0);
    $query= $this->db->limit($length,$start)->get();
return $query->result();

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

хотя на этот вопрос уже есть ответ, который я мог бы добавить -

вам никогда не следует использовать неэкранированные данные в ваших запросах, потому что вы полностью открыты для SQL-инъекций - пожалуйста, прочитайте Документация QueryBuilder и Документация запросов внимательно - особенно часть с экранированием.

, так сказать, следующий код больше подходит для вашего случая

$query = $this->db
    ->group_start()
        ->where('delivery_date >=', $from)
        ->where('delivery_date <=', $to)
    ->group_end()   
    ->group_start()
        ->group_start()
            ->where('order_date >=', $odfrom)
            ->where('order_date <=', $odto)
        ->group_end()
        ->or_group_start()
            ->where('mumbai_date >=', $mdfrom)
            ->where('mumbai_date <=', $mdto)
        ->group_end()
    ->group_end()
    ->where('order_location', $sess_location)
    ->where('designer_id',$sess_designer_id)
    ->where('is_deleted=',0)
    ->limit($length, $start)
    ->get();

Или, если вы действительно хотите использовать between, вы можете сделать это как

$query = $this->db
    ->group_start()
        ->where('delivery_date BETWEEN '.$this->db->escape($from).' AND '.$this->db->escape($to))
    ->group_end()   
    ->group_start()
        ->group_start()
            ->where('order_date BETWEEN '.$this->db->escape($odfrom).' AND '.$this->db->escape($odto))
        ->group_end()
        ->or_group_start()
            ->where('mumbai_date BETWEEN '.$this->db->escape($mdfrom).' AND '.$this->db->escape($mdto))
        ->group_end()
    ->group_end()
    ->where('order_location', $sess_location)
    ->where('designer_id',$sess_designer_id)
    ->where('is_deleted=',0)
    ->limit($length, $start)
    ->get();
0 голосов
/ 11 сентября 2018

В коде в режиме «or_where» в скобках;

$this->db->where('(delivery_date BETWEEN "'.$from.'" AND "'.$to.'") ');
$this->db->where('((order_date BETWEEN "'.$odfrom.'" AND "'.$odto
                 .'") OR (mumbai_date BETWEEN "'.$mdfrom.'" AND "'.$mdto.'"))',NULL,false);

$this->db->where('order_location',$sess_location);
$this->db->where('designer_id',$sess_designer_id);
$this->db->where('is_deleted=',0);
$query= $this->db->limit($length,$start)->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...