1

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句では必要ありません。-> where()の3番目のパラメーター(FALSE)でも機能しません:(

どうすれば問題を解決できますか?何か案は?

4

2 に答える 2

2

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');
于 2012-07-05T15:52:29.340 に答える
1

まず、データベースステートメントに不要な関数がすべて必要なわけではありません。

してみませんか:

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

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

CodeIgniterクラスが自動的にそれらをエスケープするので、mysqlエスケープについて心配する必要はありません。

于 2012-07-05T15:43:12.397 に答える