php 使用NULL时出现Codeigniter WHERE子句问题

x33g5p2x  于 2023-02-07  发布在  PHP
关注(0)|答案(2)|浏览(120)

我试图返回个人电话号码为空(如"“中)或NULL的记录。请检查此代码

$this->db->select('i.id, i.name, i.phone, b.date')
                          ->from('bookings AS b')
                          ->join('individuals AS i', 'b.individual_id = i.id')
                          ->where('b.status', 'confirmed')
                          ->where('b.date >=', '2022-09-12')
                          ->where('b.date <=', '2023-01-15')
                          ->where('i.phone = "" OR i.phone IS NULL')
                          ->order_by('b.date', 'ASC')
                          ->get();

结果是它为Phone返回NULL值,但where子句中的日期范围被覆盖,该字段的值也为NULL。
这让我想起了

object(stdClass)[129]
      public 'id' => string '52393' (length=5)
      public 'name' => string 'Mrs Janet dooley' (length=17)
      public 'phone' => null
      public 'date' => null
  1 => 
    object(stdClass)[198]
      public 'id' => string '32277' (length=5)
      public 'name' => string 'Ms Rita molongi' (length=16)
      public 'phone' => null
      public 'date' => null
sf6xfgos

sf6xfgos1#

  • 〉其中(“i.phone=“”或i.phone为空“)
    请从查询中删除条件(i.phone =“”OR)并验证结果。查询中无需包含空条件。
    如果您无法获得结果,请告知我,我将协助您解决问题。
    您也可以使用-〉where('i.phone',NULL);
nwlqm0z1

nwlqm0z12#

您的“OR”正在中断查询,因为CI将直接打印出来,AND和OR之间没有中断。执行echo $this-〉db-〉last_query();来确认。答案是插入括号:

where('(i.phone = "" OR i.phone IS NULL)')

您也可以执行group_start,但这取决于您的配置项版本。
Grouping WHERE clauses in Codeigniter

相关问题