2014-01-08 214 views
0

我是新來的CodeIgniter我有一個函數模型,此代碼笨where子句不工作

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

而且它這應該where子句後給這個錯誤

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 `username`='admin' AND `password`='7c4a8d09ca3762af61e59520943dc26494f8941b' 

,而不是這個

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

我已經搜索了每個地方像Active Record Class和也在stackoverflow CodeIgniter WHERE clause和其他論壇,但沒有找到解決方案與我的問題有關。提前致謝。

+0

而不是張貼模糊的截圖,難道你不是簡單地添加錯誤消息文本到您的問題? – Phil

+0

是的,我可以等待...... – user2727841

+0

你可以使用第三個參數來'where()'來防止CI保護帶反引號的表名,所以'$ this-> db-> where($ where,NULL, FALSE);'應該修復它 –

回答

6

嘗試像這樣:

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

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

爲什麼它接受數組而不是字符串... – user2727841

+1

這是一個問題還是一個句子? '$ this-> db-> where()'接受'table => value'對的數組。有沒有原因,這就是它的工作原理 – Prodikl

+1

@Prodikl它也接受一個自定義字符串,在OP中的問題與反引號,使用'$ this-> db-> where($ where,NULL,FALSE);'應該修復它 –

-2

其更好地使用SHA($password)或MD5()值,而不是利用哈希值檢查直接 此代碼可能工作.. !! 和查詢就可以使這個更換 用戶名= admin和密碼= 7c4a8d09ca3762af61e59520943dc26494f8941b和狀態=「1」 LIMIT 1

+0

'md5'和'SHA'與這個問題有什麼關係? – user2936213

+1

錯誤提到一個不正確的列名稱;它不是一個問題,哈希 – Prodikl

+0

如何使用codeigniter獲取代理IP地址?我知道用PHP我必須使用$ _SERVER ['HTTP_X_FORWARDED_FOR']但在codeigniter我要做什麼來獲取代理IP地址? – user2727841

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

列名是錯誤的,看看在此錯誤:3

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

號線在尋找一個名爲列

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

但說實話最好的方法是使用一個數組,否則你可能困惑:

像這樣:

​​

這將逃避你的變化對你也是如此,這更安全。

+0

如何使用codeigniter獲取代理IP地址?我知道用PHP我必須使用$ _SERVER ['HTTP_X_FORWARDED_FOR']但在codeigniter我要做什麼來獲取代理IP地址? – user2727841

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

如何使用codeigniter獲取代理IP地址?我知道用PHP我必須使用$ _SERVER ['HTTP_X_FORWARDED_FOR']但在codeigniter我要做什麼來獲取代理IP地址? – user2727841

+1

我建議你爲此創建另一個問題。或者在stackoverflow上尋找類似的線程 –

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