严格标准:只能通过引用传递变量
Posted
技术标签:
【中文标题】严格标准:只能通过引用传递变量【英文标题】:Strict Standards: Only variables should be passed by reference 【发布时间】:2013-05-21 20:00:13 【问题描述】:我的 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);
我不知道问题是什么。谁能帮帮我?
【问题讨论】:
Strict Standards: Only variables should be passed by reference 的可能重复项 【参考方案1】:您的第二个参数 'strtoupper($a_user[$db_translation['login']])' 必须是对变量的引用。
文档:Ref to bindparam
文档中的 'mixed &$variable' 说它必须是一个引用(它是 '&')
你可以创建一个变量,并将'strtoupper($a_user[$db_translation['login']])'的结果放入其中。 例如:
$foo = strtoupper($a_user[$db_translation['login']]);
$res->bindParam(':acc', $foo, PDO::PARAM_STR);
希望有帮助
【讨论】:
【参考方案2】:使用 bindValue() 因为 bindParam() 第二个参数是一个引用 喜欢
$res->bindValue(':acc', strtoupper($a_user[$db_translation['login']]));
如果你想使用 bindParam 那么你必须存储你的语句 到一个变量中并将该变量作为参数传递。喜欢。
$test = strtoupper($a_user[$db_translation['login']];
$res->bindParam(':acc', $test), PDO::PARAM_STR);
【讨论】:
【参考方案3】:用途:
$param = strtoupper($a_user[$db_translation['login']]);
$res->bindParam(':acc', $param, PDO::PARAM_STR);
【讨论】:
以上是关于严格标准:只能通过引用传递变量的主要内容,如果未能解决你的问题,请参考以下文章
reset() -“严格标准:只有变量应该通过引用传递”[重复]