Строгие стандарты: только переменные должны передаваться по ссылке

Мой 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);
}

Я не знаю, в чем проблема. Может кто-нибудь мне помочь?

1

Решение

Ваш второй параметр ‘strtoupper ($ a_user [$ db_translation [‘ login ‘]])’ должен быть ссылкой на переменную.

док: Ссылка на bindparam

смешанный &$ 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);
2

Использование:

$param = strtoupper($a_user[$db_translation['login']]);
$res->bindParam(':acc', $param, PDO::PARAM_STR);
0
По вопросам рекламы [email protected]