我使用以下postgresql命令來嘗試檢索給定電子郵件/散列pw組合的記錄。我有密碼和電子郵件存儲在表中,並且該查詢似乎成功地將f或t用於密碼檢查,但php腳本似乎不能處理輸出。使用select exists()來比較Postgres中的密碼與php
PHP:
// 2. Check Passwords
$sql = "select exists(select 1 from users where (email='".$email."') AND (pw = '".$password."'));";
echo $sql . "<br>";
$ret = pg_query($db, $sql);
if(!$ret){
echo pg_last_error($db);
exit;
}
if($ret === true){
echo "Login Successful";
}else{
$errors = $errors . "Passwords do not match. Please try again. <br>";
}
這目前輸出SQL查詢
select exists(select 1 from users where (email='[email protected]') AND (pw = '8a8bA3anjqV.g'));
,其與任一噸或f成功返回
exists
--------
t
(1 row)
。
我似乎無法弄清楚爲什麼這不與我的PHP腳本。 (對所有結果(t或f)不合格)
任何想法都將非常感激。
請注意,您的代碼已廣泛用於SQL注入。如果可能,您應該使用參數化查詢。請參閱[如何防止SQL注入PHP?](https://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) - 請注意,信息可能會有點不同,因爲你使用的是pgSQL。 – Bytewave
在同一個程序中對它進行消毒...我需要在數據庫查詢級別進行消毒嗎? – itchyspacesuit
參數化查詢更安全,因爲數據庫不必進行任何轉義,並可能錯過開發人員沒有考慮到的某些漏洞利用。它不會將整個語句作爲一個完整的SQL查詢執行,它會準備一個數據綁定的查詢,從而有效地消除SQL注入。 – Bytewave