1

除了一个查询外,我已将我的网站从 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,直到他们登录并且我可以将他们移动到新的哈希值。

4

1 回答 1

0

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 服务器中的身份验证系统使用;您不应该在自己的应用程序中使用它。

于 2020-01-18T20:44:28.390 回答