[英]Using select exists () to compare passwords in postgres with php
我正在使用以下postgresql命令來嘗試檢索給定電子郵件/哈希pw組合的記錄。 我將密碼和電子郵件存儲在表中,該查詢似乎已成功拉出f或t進行了密碼檢查,但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='alex@email.com') AND (pw = '8a8bA3anjqV.g'));
哪個返回
exists
--------
t
(1 row)
t或f成功。
我似乎無法弄清楚為什么這與我的php腳本不兼容。 (對於所有結果(t或f)都會失敗)
任何想法將不勝感激。
啊哈!
我對自己的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;
}
$bool = pg_fetch_row($ret);
echo $bool['0'] . "<br>";
if($bool['0'] === "t"){
echo "Login Successful";
}else{
$errors = $errors . "Passwords do not match. Please try again. <br>";
}
布爾值似乎不容易獲得,您需要從返回結果中提取數組行,然后訪問第零個元素以獲取t / f。 另外,它似乎不是布爾值(即使值是“ t”,也=== true失敗)。
希望這對某人有幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.