簡體   English   中英

使用 mysql PASSWORD 函數將 mysqli_query 轉換為 mysqli 准備好的語句

[英]Convert from mysqli_query to mysqli prepared statement using mysql PASSWORD function

除了一個查詢之外,我已將我的網站從 mysql 轉換為 mysqli 准備好的語句。 我無法弄清楚的查詢是:

$sql = "SELECT customerID FROM customer WHERE customerEmail = '$loginEmailAddress' AND customerPassword = PASSWORD('$loginPassword');";
$result = mysqli_query($mysqli, $sql);

這工作正常。 當我嘗試制作 mysqli 准備好的語句時,問題是 mysql PASSWORD 函數。 甚至有可能轉換這個嗎?

我試過這樣的事情:

$loginPassword = PASSWORD($loginPassword);

$stmt = $mysqli -> prepare("SELECT customerID from customer WHERE customerEmail = ? AND customerPassword =  ? ");
$stmt -> bind_param("ss", $loginEmailAddress,$loginPassword);
$stmt -> execute();
$stmt->store_result();
$stmt -> bind_result($customerID);
$stmt -> close();

當然沒有成功。 我也嘗試過這樣的事情:

$loginPassword  = '" . PASSWORD('$loginPassword') . "';

我正在努力使用 phpass,但與此同時,我需要繼續為我現有的客戶使用 PASSWORD,直到他們登錄,我可以將他們移動到新的哈希。

PASSWORD()是一個 MySQL 函數。 它是 SQL 的一部分。 你只需要參數化你傳遞給這個函數的參數。

$stmt = $mysqli -> prepare("SELECT customerID 
    FROM customer 
    WHERE customerEmail = ? AND customerPassword = PASSWORD(?) ");
$stmt -> bind_param("ss", $loginEmailAddress,$loginPassword);
$stmt -> execute();

警告:
僅存儲使用 PHP 的password_hash()創建的密碼哈希,然后您可以使用password_verify()進行驗證。 看看這篇文章:如何使用 password_hash並了解有關PHP 中 bcrypt 和密碼哈希的更多信息

警告:

從 MySQL 5.7.6 起,此功能已棄用,並將在未來的 MySQL 版本中刪除。

PASSWORD() 被 MySQL Server 中的認證系統使用; 你不應該在你自己的應用程序中使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM