Php 如何避免警告消息:只有变量应该通过引用传递

Php 如何避免警告消息:只有变量应该通过引用传递,php,database,Php,Database,该代码生成警告: PHP严格标准:只能通过引用传递变量 这段代码使用的是早期版本的PHP。我现在使用的是PHP5。数据库没有问题。我知道我需要把一个常数变成一个变量,但实验没有发现这个问题 $user = array_shift($db->get("SELECT * FROM users WHERE username='{$db->prepare(str_ireplace(array('SSS_','SSS_','SSS64_'),'',trim($_REQUEST['userna

该代码生成警告:

PHP严格标准:只能通过引用传递变量

这段代码使用的是早期版本的PHP。我现在使用的是PHP5。数据库没有问题。我知道我需要把一个常数变成一个变量,但实验没有发现这个问题

$user = array_shift($db->get("SELECT * FROM users WHERE 
username='{$db->prepare(str_ireplace(array('SSS_','SSS_','SSS64_'),'',trim($_REQUEST['username'])))}' AND password='{$db->prepare(trim($_REQUEST['password']))}' 
AND status='active' 
AND role='user' 
AND expiration > '{$db->prepare(date('Y-m-d'))}' 
ORDER BY pkid DESC",false,'pkid'));

代码似乎工作正常,但在error.log中产生警告。

您的问题是
$db->get
返回的是一个值,而不是一个引用,并且希望修改传递给它的变量。将代码更改为类似以下内容,警告将消失:

$results = $db->get("SELECT * FROM users WHERE ... ",false,'pkid'));
$user = array_shift($results);

这里有一个例子来说明这个问题。

什么是
$db
?我从来没有见过像这样事先准备好的声明。看起来您要么使用了糟糕的哈希算法,要么密码没有。请不要这样做,散列您的密码并使用最近的函数,可能是
password\u hash
。此外,如果您指定了您正在使用的版本和现在正在使用的版本,这将有助于解决这个问题。PHP5现在已经过时了,您应该使用7。