[英]PHP: PDO bindValue() causes 0 results to be returned
我在使用PDO bindValue()函數時遇到了一些麻煩。 每當我似乎使用它時,我的查詢總是返回0個結果。 但是,如果我直接將$ user和$ pass放入sql而不使用bindValue(),它會很好地工作
$ user是一個字符串
$ password是sha1()哈希
public function login($user, $pass) {
global $CMS;
$sql = "SELECT `username,`password` FROM `" . TB_PREFIX . "users` WHERE `username` = ':user' AND `password` = ':pass'";
$query = $CMS->prepare_query($sql);
$query->bindValue(':user', $user, PDO::PARAM_STR);
$query->bindValue(':pass', $pass, PDO::PARAM_STR);
$query->execute();
# User successfully authenticated
if ($query->rowCount() == 1) {
# Get all data from DB and populate class variables
self::populate_user_data($user);
session_register($user . "-" . base64_encode($_SERVER['REMOTE_ADDR']));
return true;
}
# User failed authentication
return false;
}
您不應該自己將引號引起來,而是將其添加起來(如果需要,例如在字符串的情況下,在這種情況下):
$sql = "SELECT `username,`password` FROM `" . TB_PREFIX . "users`
WHERE `username` = :user AND `password` = :pass";
准備好的語句中的占位符不能被引用; PDO已經在進行所有報價。 你要:
$sql = "SELECT `username,`password` FROM `" . TB_PREFIX . "users` " .
"WHERE `username` = :user AND `password` = :pass";
使用准備好的語句時,值會自動轉義。
這意味着,您不必在參數周圍設置引號。
嘗試:
$sql = "SELECT `username,`password` ".
"FROM `" . TB_PREFIX . "users` ".
"WHERE `username` = :user AND `password` = :pass";
你應該沒事的
不過,請注意: 切勿從字面上存儲用戶密碼。 檢查這篇出色的文章: 您可能存儲了錯誤的密碼
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.