Справка MySQL Query for Matching Items - PullRequest
0 голосов
/ 13 ноября 2009

У меня небольшие проблемы с выполнением этого запроса:

$userId = mysql_real_escape_string( $_SESSION['user_id'] );
$userPassProvided = mysql_real_escape_string( $_POST['oldPassword'] );
$query  = "SELECT user_id, AES_DECRYPT( user_pass, '".$db_aes_key."' ) AS user_pass ";
$query .= "FROM users_tbl WHERE MATCH( user_id, user_pass ) ";
$query .= "AGAINST( '".$userId."', '".$userPassProvided."' IN BOOLEAN MODE ) LIMIT 1";
$result = mysql_query( $query, $mysql_db );

Что я хотел бы сделать - это запросить users_tbl для записи, в которой user_id и user_pass совпадают с $ userId и $ userPassProvided соответственно. Может кто-нибудь сказать мне, что не так с моим запросом?

Спасибо. :)

Ответы [ 2 ]

1 голос
/ 13 ноября 2009

Следующее функционально эквивалентно тому, что вы хотите сделать. (Читать «однако ...» ниже)

$query  = "SELECT user_id, AES_DECRYPT( user_pass, '".$db_aes_key."' ) AS user_pass ";
$query .= "FROM users_tbl ";
$query .= "WHERE user_id = '".$userId."' ";
$query .= "  AND AES_DECRYPT(user_pass, '".$db_aes_key."' ) = '".$userPassProvided."' ";
$query .= "LIMIT 1";

... однако MySQL должен был бы AES-расшифровать каждый зашифрованный пароль в базе данных. Это будет дорогостоящим в вычислительном отношении и не позволит использовать какой-либо индекс SQL.

В качестве альтернативы вы можете зашифровать предоставленный пароль и сопоставить его с теми, которые хранятся в базе данных. Может быть что-то подобное (примечание: не проверено):

$query  = "SELECT user_id, AES_DECRYPT( user_pass, '".$db_aes_key."' ) AS user_pass ";
$query .= "FROM users_tbl ";
$query .= "WHERE user_id = '".$userId."' ";
$query .= "  AND user_pass = AES_ENCRYPT('".$userPassProvided."', '".$db_aes_key."' ) ";
$query .= "LIMIT 1";
0 голосов
/ 13 ноября 2009

MATCH () ПРОТИВ () не работает так, как вы ожидаете. Он пытается сопоставить одну строку в AGAINST () с каждым из столбцов, представленных в MATCH (), а не сравнивать value1 с column1 и value2 с column2.

Вы пробовали ...WHERE user_id = '".$userId."' AND user_pass = '"$userPassProvided"' LIMIT 1?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...