Codeigniter where子句不起作用

时间:2014-01-08 05:14:55

标签: php mysql codeigniter

我是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和其他论坛的所有位置,但没有找到与我的问题相关的解决方案。提前谢谢。

7 个答案:

答案 0 :(得分:6)

尝试这样:

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

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

答案 1 :(得分:2)

选项1: 您可以创建一个条件字符串并将其传递给where函数。但请务必在等于“=”

之前和之后添加空格

此处类似帖子中提到同样的事情error 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); 

答案 2 :(得分:1)

尝试以下代码...

  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();
}

答案 3 :(得分:1)

您也可以尝试使用此代码。

    $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();

答案 4 :(得分:0)

您的列名称错误,请查看此错误:

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
));

这也会为你逃避变量,这样更安全。

答案 5 :(得分:-1)

尝试这样

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

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

在“第一列名称”与“运算符”之间留空

在codeigniter v1.0中

答案 6 :(得分:-2)

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

相关问题