代码:
$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']);