MySQLi准备的声明抱怨"only variables should be passed by reference"



代码:

$stmt->bind_param("s", md5($input['user'] . $config['salt']));

PHP 错误消息:

只应通过引用传递变量

我一直在做这个项目,但现在我被困住了。我是PHP的新手。怎么办?

感谢您使用 MySQLi 准备语句! 他们很痛苦,但值得。

bind_param通过引用获取值。 它通过查看您正在传递的变量并直接指向内部来做到这一点。

在调用中,你将返回函数调用的字符串结果 - 在本例中md5。 因为不涉及变量,所以没有内部可以指向。 PHP抱怨无法通过引用传递数据。

您需要将函数调用的结果粘贴到变量中,然后将该变量传递到绑定中。

大胖警告! md5不再是安全的哈希,应用于存储密码。 当你有机会时,你应该更新到更好的哈希格式,比如bcrypt,PBKDF2,scrypt等。

bind_param方法的每个参数(但第一个参数)都必须是变量,而不是像您的情况那样是函数返回值。只能通过引用传递变量。

考虑到这一点,您可以轻松更改代码以摆脱错误消息:

$input['hash'] = md5($input['pass'] . $config['salt']);
$stmt->bind_param("ss", $input['user'], $input['hash']);

相关内容

最新更新