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

时间:2013-05-27 00:55:01

标签: php standards strict

我的PHP脚本显示错误:

Strict Standards: Only variables should be passed by reference in C:\....*.php on line 551

代码如下:

function trinity_premissions()
{
        global $ACC_PDO, $WEB_PDO, $a_user, $db_translation;

        $end = false;

        $res = $WEB_PDO->prepare("SELECT acc_login, gmlevel FROM `accounts_more` WHERE UPPER(acc_login) = :acc");
/* 551 */$res->bindParam(':acc', strtoupper($a_user[$db_translation['login']]), PDO::PARAM_STR);
        $res->execute();

        if ($res->rowCount() == 1)
        {
                $s2 = $res->fetch(PDO::FETCH_ASSOC);
                if ($s2['gmlevel']<>'')
                {
                        return $s2['gmlevel'];
                }
        }
        unset($res);
}

我不知道问题是什么。任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:2)

你的第二个参数'strtoupper($ a_user [$ db_translation ['login']])'必须是对变量的引用。

doc:Ref to bindparam

文档中的'mixed&amp; $ variable'表示它必须是引用(它是'&amp;')

你可以创建一个变量,并将'strtoupper($ a_user [$ db_translation ['login']])'的结果放入其中。 例如:

$foo = strtoupper($a_user[$db_translation['login']]);
$res->bindParam(':acc', $foo, PDO::PARAM_STR);

希望这个帮助

答案 1 :(得分:2)

  

使用 bindValue()因为bindParam()第二个arg是一个引用   像

$res->bindValue(':acc', strtoupper($a_user[$db_translation['login']]));
  

如果您想使用 bindParam ,则必须存储您的对帐单   转换为一个变量并将该变量作为参数传递。等。

$test = strtoupper($a_user[$db_translation['login']];
$res->bindParam(':acc', $test), PDO::PARAM_STR);

答案 2 :(得分:0)

使用:

$param = strtoupper($a_user[$db_translation['login']]);
$res->bindParam(':acc', $param, PDO::PARAM_STR);