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

Pha*_*rdy -2 php mysqli

在此输入图像描述

码:

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

PHP错误消息:

只应通过引用传递变量

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

Cha*_*les 7

感谢您使用MySQLi编写的语句!他们很痛苦,但值得.

bind_param通过引用获取值.它通过查看您传递的变量并直接指向内部来实现此目的.

在你的调用中,你将返回一个函数调用的字符串结果 - md5在这种情况下.因为没有涉及变量,所以没有内脏指向.因此,PHP抱怨无法通过引用传递数据.

您需要将函数调用的结果粘贴到变量中,然后将该变量传递给bind.

大胖警告! md5不是安全散列任何更长的时间,并且应该不会被用来存储密码.如果有机会,您应该更新为更好的哈希格式,例如bcrypt,PBKDF2,scrypt等.


hak*_*kre 5

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

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

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