2014-09-28 73 views
-1
$this->db->select('*'); 
$this->db->from('user'); 
$this->db->where("Password",$password); 
$this->db->where("Status",true); 
$this->db->where("(Username = '$username' OR Email = '$email')"); 
$query=$this->db->get(); 

查詢成功的電子郵件條件,但用戶名失敗,有人可以幫助我理解爲什麼這不會按照預期的方式運作。Codeigniter - 活動記錄如何在哪裏(codition或條件)

功能:當password = password和status = true和(username = username或email = email)時,查詢應該返回記錄。

這是一個登錄表單,用戶可以指定用戶名和密碼或電子郵件和密碼,這些匹配的查詢應返回結果。

此外在另一個說明查詢不完全匹配的密碼正好我的意思是不區分大小寫,我想密碼比較是區分大小寫,所以我們可以得到一個完全匹配。

請幫忙!感謝我advbance

回答

1

因爲它是由笨

提供的用戶指南中如果使用多個函數調用,他們將與它們之間被鏈接說:

$this->db->where('name', $name); 
$this->db->where('title', $title); 
$this->db->where('status', $status); 

上面的代碼將產生在SQL如下:

WHERE name = 'Joe' AND title = 'boss' AND status = 'active' 

如果你想使用或條件,你應該試試這個:

$this->db->where('name !=', $name); 
$this->db->or_where('id >', $id); 

而且上面的代碼產生:

WHERE name != 'Joe' OR id > 50 

您也可以執行SQL語句如下:

$this->db->query('YOUR QUERY HERE'); 

爲了防止SQL注入,您可以如下操作:

$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?"; 
$this->db->query($sql, array(3, 'live', 'Rick')); 
+0

感謝您的輸入,非常感謝 – coolcoder 2014-09-29 04:44:02

+0

@coolcoder您可以接受答案並將其標記爲已解決,如果它解決了問題,請按照以下步驟操作=> http http://meta.stackexchange.com/a/5235/**並歡迎來到Stack。 – 2014-09-29 17:19:28

0

您可以使用以下方法獲得所需的結果。在這裏,我們要做的是首先驗證用戶輸入是電子郵件還是用戶名。如果是用戶名,請檢查用戶名或電子郵件是否檢入用戶名列。

$this->db->select('*'); 
$this->db->from('user'); 
$this->db->where("Password",$password); 
$this->db->where("Status",true); 

$pattern = "(^[a-zA-Z0-9_.+-][email protected][a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)"; 

if(preg_match($pattern,$email))//check if entered value in email field is email 
$this->db->where('email',$email); 

else // you can verify here username if it is any standard format 
$this->db->where('username',$email); 

$query = $this->db->get(); 

這個查詢是非常有效的,因爲它節省了sql查詢的執行時間。

+0

感謝您的建議 – coolcoder 2014-09-29 04:44:32