【问题标题】:How to apply 2 OR and 1 AND condition in code igniter in SQL?如何在 SQL 的代码点火器中应用 2 OR 和 1 AND 条件?
【发布时间】:2014-04-05 16:30:20
【问题描述】:

我制作了一个实用程序,用户必须输入他的卷号或手机号码才能访问私人区域,但我也希望他成为该私人区域的成员,所以我如何编写活动记录查询存档。以前我试过这个查询

$where = "member='1' AND rollnumber='".$num."' OR mobile='".$number."'";
$this->db->where($where);

1 代表该组的一部分,正如我所说,我试过了,但我得到了数据库错误

“where 子句”中的未知列“member=1”

注意:查询应该是这样的

(member == 1) AND (rollnumber = $num OR mobile = $num)

【问题讨论】:

  • 您的表中似乎没有名为 member 的列?
  • 显示您的完整查询以及表架构
  • 表方案表名:学生列名:student_name、member、rollnumber、mobile、age
  • @avinashizhere 我的意思是所有使用 phpmyadmin 发布由DESCRIBE student 生成的所有详细信息

标签: php mysql codeigniter activerecord


【解决方案1】:

在您的情况下发生了什么,是 CodeIgniter 试图转义字段名称并且失败,从而生成错误的 SQL。

您可以将关联数组传递给where,而不是制作自己的字符串。至于OR,可以使用or_where

$this->db->where(array(
    'member' => 1,
    'rollnumber' => $num
))->or_where('mobile', $number);

这将生成以下内容:

WHERE member = 1 AND rollnumber = $num OR mobile = $number

注意:由于 MySQL 处理 AND/OR 的方式,此查询可能无法按您的意愿运行。它会被解释为:

(member = 1 AND rollnumber = $num) OR mobile = $number

我认为这不是你想要的。我假设你想要:

member = 1 AND (rollnumber = $num OR mobile = $number)

这在 CodeIgniter 中无法很好地完成。您需要像在问题中尝试的那样构建自己的 WHERE 子句。

试试这样的:

$numbers = '(rollnumber = '.$this->db->escape($num).' OR mobile = '.$this->db->escape($number).')';

$this->db->where('member', 1)->where($numbers, NULL, FALSE);

这里的关键是FALSE 作为where() 的第三个参数。这告诉 CodeIgniter 不要尝试转义您的字段名称。

这将正确生成:

member = 1 AND (rollnumber = $num OR mobile = $number)

【讨论】:

  • 请原谅我的问题写作技巧,就像 (member == 1) AND (rollnumber = $num OR mobile = $num)
  • @avinashizhere:是的,这就是我认为你想要的。我刚刚在答案中添加了有关此的更多信息。
【解决方案2】:

感谢您的回复,我尝试了新的方法来找到解决方案,我成功了,根据问题,我应用了这个解决方案

$this->db->where('rollnumber',$num);
$this->db->or_where('mobile',$num);
$query = $this->db->get_where('student',array('member'=>1));

它成功了:)

【讨论】:

    猜你喜欢
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 2014-05-26
    • 2012-06-04
    • 1970-01-01
    • 2017-04-02
    • 2016-05-27
    • 2017-06-11
    相关资源
    最近更新 更多