我的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);
}
我不知道问题是什么。任何人都可以帮助我吗?
答案 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);