MySQL查询匹配项帮助

时间:2009-11-12 21:56:39

标签: php mysql

我在使这个查询起作用时遇到了一些麻烦:

$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 个答案:

答案 0 :(得分:1)

以下功能相当于您似乎想要做的事情。 (请阅读下面的“但是......”)

$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";

答案 1 :(得分:0)

MATCH()AGAINST()不像你期望的那样工作。它的作用是尝试将AGAINST()中的单个字符串与MATCH()中提供的每个列进行匹配,而不是将value1与column1和value2与column2进行比较。

您是否尝试过...WHERE user_id = '".$userId."' AND user_pass = '"$userPassProvided"' LIMIT 1