簡體   English   中英

CodeIgniter其中值IN(Field1,Field2)

[英]CodeIgniter Where value IN (Field1,Field2)

我需要在我的auth腳本中設置查詢,在WHERE子句中我想使用'_MY_POST_VALUE' IN (Field1, Field2)

最終查詢將是這樣的:

SELECT * FROM 'myprefix_users' WHERE 'myemail@email.com' IN ('EMAIL','LOGIN') AND PASSWORD=SHA1('mypassword')

我試過這樣做:

$this->db->where("'" . mysql_escape_string($_POST['login']) . "' IN (EMAIL,LOGIN)", NULL, FALSE);
$this->db->where("PASSWORD=SHA1('" . mysql_real_escape_string($_POST['password']) . "')");
$userdb = $this->db->get('users');

..但CodeIgniter將前綴設置為我的登錄/電子郵件值並發送錯誤:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''test@test.com' IN (EMAIL,LOGIN) AND PASSWORD=SHA1('123')' at line 3

SELECT * FROM (`myprefix_users`) WHERE myprefix_'test@test.com' IN (EMAIL,LOGIN) AND PASSWORD=SHA1('123')

我需要在表名中使用db_prefix,但我不需要在我的WHERE子句中,甚至第三個參數(FALSE) - > where()對我不起作用:(

我怎樣才能解決我的問題? 有任何想法嗎?

嘗試使用Codeigniter的Input類。 它將簡化您的代碼:

$login = $this->input->post('login', TRUE);
$password = $this->input->post('password', TRUE);
$this->db->where("'$login' IN ", "('EMAIL','LOGIN')", FALSE);
$this->db->where("PASSWORD", "SHA1('$password')", FALSE);
$userdb = $this->db->get('users');

首先,您不需要數據庫語句中的所有不必要的函數。

為什么不這樣做:

$user = $_POST['user'];
$pass = sha1($pass);

$this->db->where("(email = '$user' OR username = '$user') AND password = '$pass'");
$query = $this->db->get('users');

您無需擔心mysql轉義,因為CodeIgniter類會自動為您轉義它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM