【问题标题】:error in codeigniter custom where clausecodeigniter 自定义 where 子句中的错误
【发布时间】:2014-01-17 03:15:13
【问题描述】:

我指的是 codeigniter 用户指南来编写自定义 where 子句。 根据它所说的自定义where子句这样写的指南。

 $where = "name='Joe' AND status='boss' OR status='active'";
 $this->db->where($where); 

但是当我在我的模型浏览器中使用时会抛出错误。

A Database Error Occurred

Error Number: 1054

Unknown column 'user_name='Joe'' in 'where clause'

SELECT * FROM (`Management`) WHERE `user_name='Joe'` AND password='boss' OR password='active'

Filename: /var/www/models/hr_login_model.php

Line Number: 28

这只是一个测试查询。我的实际查询是动态查询,它也给出了这个错误。

$where = "user_name='".$username."' AND password='".$password."' AND Department='".$dep_br."' OR Br_no='".$dep_br."'";

为什么它总是将列名和值都作为列名?

【问题讨论】:

  • 不是解决方案,但为什么不避免这种不安全的方法(您需要手动转义值)并使用更安全、更简单的方法?
  • @DamienPirsy - 实际上我不知道这是一种不安全的方法。如果你能告诉我一个更好的方法,我会非常感谢。

标签: php mysql codeigniter


【解决方案1】:

= 前后的用户空间如下所示。

$where = "name = 'Joe' AND status = 'boss' OR status = 'active'"; 
$this->db->where($where); 

【讨论】:

  • 这无关紧要,空格不是问题(它们甚至不在文档示例中)
  • @ Damien Pirsy - 它们没有记录在案,但如果您查看第 430 行的 DB_active_rec.php 文件,则存在使用“=”检查运算符的条件。这意味着 = 运算符之前和之后应该有一个空格
  • @Yasitha- 如果此解决方案对您有帮助,请告诉我。
  • 我必须承认我被难住了!没有检查 CI 的实际代码,但这应该在他们的文档中被指出是一个错误(如果有人仍在处理这个问题)。恭喜男人
  • 好吧,说实话,即使我没有检查代码,直到我有时会遇到这个问题。我挣扎了很多,决定检查核心文件,然后我找到了。 :)
【解决方案2】:

试试这个:

$where = "name='Joe' AND status='boss' OR status='active'";
$this->db->where($where, NULL, FALSE);

【讨论】:

    【解决方案3】:

    试试这种方式会更好更安全

    $this->db->where("name","joe");
    $this->db->where("status =","boss");
    $this->db->or_where("status","active");
    

    【讨论】:

      【解决方案4】:

      使用关注

      $where = "user_name='$username' AND password='$password' AND (Department='$dep_br' OR Br_no='$dep_br')";
      

      【讨论】:

      • 出于好奇:CodeIgniter 是如何知道你是如何组成字符串的?它会绕过 PHP 解析器吗?
      • @ÁlvaroG.Vicario - 我试过了。但它需要在 = 符号之前和之后放置空格才能工作。谢谢
      • 我将此标记为最适合我的答案。因为没有 () 查询给了我不需要的行。但是使用 () 它可以按我的意愿工作。但正如 Trimantra 软件解决方案所指出的那样,应该有空间。 @Trimantra 软件解决方案
      猜你喜欢
      • 1970-01-01
      • 2023-03-22
      • 2021-05-27
      • 2012-04-23
      • 2013-10-03
      • 1970-01-01
      • 2015-06-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多