MySQLi准备好的声明抱怨“只应通过引用传递变量”

时间:2012-12-10 04:22:18

标签: mysqli php

enter image description here

代码:

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

PHP错误消息:

  

只应通过引用传递变量

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

2 个答案:

答案 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']);