我遇到查詢問題。我(使用PHP PDO和MySQL),使用以下過程中的一個表中查詢:MySQL查詢連接異常行爲
構建查詢字符串$ SQL:
SELECT *
FROM `user`
WHERE (`username`=:username OR `email`=:username)
AND `password`=:password AND `valid`='1';
並使用此數組$ PARAMS:
Params
(
[:password] => 18155dbf12503d726883784d1d9755f8d3382ba7
[:username] => [email protected]
)
呼叫這個功能:
$results_array = $database->QueryForObject($sql, $params);
public function QueryForObject($query, $binds)
{
$stmt = $this->db->prepare($query);
foreach($binds as $bindKey => &$key)
{
$stmt->bindParam($bindKey, $key, PDO::PARAM_STR);
}
return $this->RunObjectQuery($stmt, NULL , "stdClass");
}
我的問題是用戶名可以INCOMP lete甚至失蹤,並且它用來查找用戶的所有密碼都是...我非常確定它不應該這樣做,但我無法弄清楚原因。
作爲一個側面說明,這裏是我的表的說明:
Field , Type , Null ,Key ,Default , Extra
id , int(10) unsigned , NO ,PRI ,NULL auto_increment
username , varchar(30) , NO ,UNI ,NULL
email , varchar(50) , NO , ,NULL
password , varchar(100) , NO , ,NULL
first_name , varchar(30) , NO , ,NULL
last_name , varchar(30) , NO , ,NULL
rights , enum('normal','medium','high','admin','super') , NO , ,NULL
last_loggedin , timestamp , YES , ,NULL
status , enum('current','expired','temporary') , NO , ,NULL
valid , tinyint(1) , NO , ,NULL
other_comments , varchar(500) , YES , ,NULL
gender , enum('male','female') , YES , ,NULL
company_position , varchar(50) , YES , , NULL
任何建議都歡迎!
你有一個空白的電子郵件地址行? – jcsanyi
您不通過電子郵件地址,因此任何空的電子郵件地址記錄將被退回 – DevZer0
「用戶名」可以是實際的用戶名或電子郵件,所以冗餘:用戶名是故意的。它代表用戶用來填寫用戶名輸入字段的任何內容。 – Jonathan