【问题标题】:Unknown column in WHERE clause using Codeigniter使用 Codeigniter 的 WHERE 子句中的未知列
【发布时间】:2018-09-08 03:50:35
【问题描述】:

我正在尝试重构 CodeIgniter 中的一些代码,并尝试在模型中包含实际的 SELECT 查询语句。但是我收到一条错误消息,

未知列:where 子句中的 XXX。

这是我在 CodeIgniterSELECT query statement 的代码:

public function login_user($username, $password){

            $result = $this->db->query('SELECT * FROM users WHERE (username = '.$username.') AND (password = '.$password.')');

            if ($result->num_rows() == 1) {
                return $result->row(0)->id;
            }else{
                return false;
            }

【问题讨论】:

  • 假设您的表实际上有 usernamepassword 列,您注释掉的两行应该有效。你能发布你的表架构吗?
  • 是的。我注释掉了代码以在 CodeIgniter 中尝试实际的 SELECT 语句。这是我的表模式:表:用户 id int(11) pk 用户名 varchar(255) 密码 varchar(255)
  • 这个函数看起来很完美......你确定你在同一行得到错误吗?
  • 是的..我使用 SELECT 查询语句的那一行..

标签: php mysql codeigniter


【解决方案1】:

试试这个

 $result = $this->db->query("SELECT * FROM users WHERE username = '".$username."' AND password = '".$password."'");

【讨论】:

    【解决方案2】:

    您可能希望对该功能进行一些调整。

    • 使用查询生成器,因此,如果您在任何时候更改数据库,您都必须进行少量更改。它还会自动转义您的变量。
    • 那么,如果您只想要 ID,那么选择 * 是一个非常糟糕的主意
    • 为这些变量提供默认值并检查它们是否已准备好在查询中使用也是一个好主意。
    • 最后,您的 else 语句实际上是无关紧要的。默认情况下,您可以只返回 false ,而无需其他。

    类似这样的:

    public function login_user($username = null, $password = null) {
        if (is_null($username) || is_null($password)) return false;
        $result = $this->db->select('id')
            ->from('users')
            ->where('username', $username)
            ->where('password', $password)
            ->get()
            ->row();
    
        if ( !empty($result) ) {
            return $result->id;
        }
        return false;
    }
    

    【讨论】:

    • 感谢您的提示,@marcogmoteiro 既然您提到了它,我将拥有该功能和我的其他功能,以便更好地了解 CodeIgniter
    猜你喜欢
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多