2009-11-12 20 views
0

我有一個小麻煩這個查詢工作: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,分別。有人可以告訴我我的查詢有什麼問題嗎?

謝謝。 :)

回答

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-decript數據庫中的每一個編碼的密碼。這將在計算上花費很大,並且阻止使用任何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

MATCH()反對()不會像你期待的那樣工作。它所做的是嘗試將AGAINST()中的單個字符串與MATCH()中提供的每個列進行匹配,而不是將value1與column1和value2與column2進行比較。

你試過...WHERE user_id = '".$userId."' AND user_pass = '"$userPassProvided"' LIMIT 1