代码:
$stmt->bind_param("s", md5($input['user'] . $config['salt']));
PHP错误消息:
只应通过引用传递变量
我一直在做这个项目,但现在我被困住了。我是PHP的新手。怎么办?
答案 0 :(得分:7)
感谢您使用MySQLi编写的语句!他们很痛苦,但值得。
bind_param
通过引用获取值。它通过查看您传递的变量并直接指向内部来实现此目的。
在您的调用中,您将返回函数调用的字符串结果 - 在这种情况下为md5
。因为没有涉及变量,所以没有内脏指向。 PHP因为无法通过引用传递数据而抱怨。
您需要将函数调用的结果粘贴到变量中,然后将该变量传递给bind。
大胖警告! md5
不再安全哈希,并且不用于存储密码。如果有机会,您应该更新为更好的哈希格式,例如bcrypt, PBKDF2, scrypt, etc。
答案 1 :(得分:2)
bind_param
method的每个参数(但第一个)必须是变量,而不是在您的情况下,函数返回值。只有变量可以是passed by reference。
考虑到这一点,您可以轻松更改代码以消除错误消息:
$input['hash'] = md5($input['pass'] . $config['salt']);
$stmt->bind_param("ss", $input['user'], $input['hash']);