【问题标题】:Codeigniter where clause is not workingCodeigniter where 子句不起作用
【发布时间】:2014-01-26 01:47:01
【问题描述】:

我是 codeigniter 的新手,我有一个带有此代码的模型中的函数

    $this->db->select("id, username, password");
    $this->db->from(TABLE_USERS);
    $where = "username='".$username."' AND password='".$password."' AND status='1'";
    $this->db->where($where);
    $this->db->limit(1);
    $login = $this->db->get();
    echo '<pre>';print_r($login);echo '</pre>';die('Call');

它给出了这个错误

A Database Error Occurred

Error Number: 1054

Unknown column 'username='admin'' in 'where clause'

SELECT `id`, `username`, `password` FROM (`users`) WHERE `username='admin'` AND password='7c4a8d09ca3762af61e59520943dc26494f8941b' AND status='1' LIMIT 1

Filename: C:\wamp\www\customadmin\system\database\DB_driver.php

Line Number: 330

在where子句之后应该是这样的

WHERE `username`='admin' AND `password`='7c4a8d09ca3762af61e59520943dc26494f8941b'

而不是这个

WHERE `username='admin'` AND password='7c4a8d09ca3762af61e59520943dc26494f8941b'

我搜索了Active Record Class 以及stackoverflow CodeIgniter WHERE clause 和其他论坛等所有地方,但没有找到与我的问题相关的解决方案。提前致谢。

【问题讨论】:

  • 与其张贴模糊的屏幕截图,不如简单地将错误消息文本添加到您的问题中?
  • 是的,我可以等一下……
  • 你可以使用where()的第三个参数来防止CI用反引号保护表名,所以$this-&gt;db-&gt;where($where,NULL,FALSE);应该修复它

标签: php mysql codeigniter


【解决方案1】:

试试这样:

$where = array('username' => $username, 'password' => $password, 'status' => '1');

$this->db->where($where); 

【讨论】:

  • 这是一个问题还是一个句子? $this-&gt;db-&gt;where() 接受 table=&gt;value 对的数组。没有什么原因,就是这样工作的
  • @Prodikl 它也接受自定义字符串,OP 中的问题是反引号,使用 $this-&gt;db-&gt;where($where,NULL,FALSE); 应该可以解决它
  • 啊,笨蛋。在这种情况下,它是反引号,是的。我也发布了答案。
  • 如何使用codeigniter获取代理ip地址???我知道使用 PHP 我必须使用 $_SERVER['HTTP_X_FORWARDED_FOR'] 但在 codeigniter 中我必须做些什么来获取代理 IP 地址???
【解决方案2】:

最好使用 SHA($password) 或 MD5() 值而不是直接检查哈希值 此代码可能有效..!! 对于查询,您可以进行此替换 用户名=admin AND 密码=7c4a8d09ca3762af61e59520943dc26494f8941b AND status='1' LIMIT 1

【讨论】:

  • md5SHA这道题有什么关系?
  • 错误提到了一个不正确的列名;这不是哈希的问题
  • 如何使用codeigniter获取代理ip地址???我知道使用 PHP 我必须使用 $_SERVER['HTTP_X_FORWARDED_FOR'] 但在 codeigniter 中我必须做些什么来获取代理 IP 地址???
【解决方案3】:

试试下面的代码...

  function get_user(){
    $this->db->select('id, username, password');
            $where = "username=$username AND password=$password AND status='1'";
    $this->db->where($where);
            $this->db->limit(1);
    $query = $this->db->get('YOUR TABLE NAME');
    return $query->row_array();
}

【讨论】:

    【解决方案4】:

    你的列名错误,看看这个错误:

    SELECT `id`, `username`, `password` 
    FROM (`users`) 
    WHERE `username='admin'` 
    AND password='7c4a8d09ca3762af61e59520943dc26494f8941b' 
    AND status='1' 
    LIMIT 1
    

    第 3 行。它正在寻找一个名为

    的列
    `username='admin'`
    

    应该在哪里

    `username`='admin' // the tick marks (`) should wrap the column name
    

    试试这个:

    $where = "`username`='$username' AND `password`='$password' AND `status`=1";
    $this->db->where($where);
    

    但老实说,最好的方法是使用数组,否则您可能会混淆:

    像这样:

    $this->db->where(array(
        'username' => $username,
        'password' => $password,
        'status' => 1
    ));
    

    这也会为您转义变量,这样更安全。

    【讨论】:

    • 如何使用codeigniter获取代理ip地址???我知道使用 PHP 我必须使用 $_SERVER['HTTP_X_FORWARDED_FOR'] 但在 codeigniter 中我必须做些什么来获取代理 IP 地址???
    【解决方案5】:

    选项 1: 您可以创建一个条件字符串并将其传递给 where 函数。但请确保在 Equals to "="

    之前和之后添加空格

    error in codeigniter custom where clauseerror in codeigniter custom where clause

     $where = "username = '".$username."' AND password = '".$password."' AND status = '1'";
     $this->db->where($where);
    

    选项 2:

    编写如下代码。

    $where = array('username' => $username, 
                   'password' => $password, 
                   'status'   => '1');
    $this->db->where($where); 
    

    【讨论】:

    • 如何使用codeigniter获取代理IP地址???我知道使用 PHP 我必须使用 $_SERVER['HTTP_X_FORWARDED_FOR'] 但在 codeigniter 中我必须做些什么来获取代理 IP 地址???
    • 我建议您为此创建另一个问题。或者在stackoverflow上寻找类似的线程
    【解决方案6】:

    你也可以试试这个代码。

        $this->db->select("id, username, password");
        $this->db->from(TABLE_USERS);
        $this->db->where('username', $username);
        $this->db->where('password', $password);
        $this->db->where('status', 1);
        $this->db->limit(1);
        $login = $this->db->get();
    

    【讨论】:

      【解决方案7】:

      这样试试

      $where = "username='".$username."' AND password='".$password."' AND status='1'";
      

      $where = "username ='"~~~~~
      

      在“第一列名称”和“运算符”之间留一个空白

      在codeigniter v1.0中

      【讨论】:

        猜你喜欢
        • 2016-07-24
        • 2016-11-13
        • 1970-01-01
        • 1970-01-01
        • 2015-01-27
        • 1970-01-01
        • 2012-04-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多