除一个查询外,我已将我的网站从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_hash()
进行验证。看看这篇文章:password_verify()
并了解有关password_verify()
的更多信息>
警告:
此功能自MySQL 5.7.6开始不推荐使用,并将在以后的MySQL版本中删除。
PASSWORD()由MySQL Server中的身份验证系统使用;您不应在自己的应用程序中使用它。