使用mysql PASSWORD函数从mysqli_query转换为mysqli预编译语句

时间:2012-08-02 16:04:42

标签: mysqli prepared-statement

我已将我的网站从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,直到他们登录并且我可以将它们移动到新的哈希。

1 个答案:

答案 0 :(得分: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()进行验证。看一下这篇帖子:How to use password_hash,并了解有关bcrypt & password hashing in PHP

的更多信息

警告:

此功能自MySQL 5.7.6起不推荐使用,并将在以后的MySQL版本中删除。

PASSWORD()由MySQL Server中的身份验证系统使用;您不应该在自己的应用程序中使用它。