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

Я работаю над системой входа для проекта с использованием программирования MVC и столкнулся с этой ошибкой. Вот код, строка проблемы № 31

Эта система входа в систему является учебным пособием, я работал с ней точно так же, как есть. Я читал, что есть некоторые проблемы с версией PHP 5? Не уверен, надеюсь, кто-нибудь может мне помочь.

Проблема:

$stmt->bind_param("ss", $user, md5($pass . $this->salt)); 

Код:

 <?php /* Authorization Class deal with auth tasks */ class Auth { private $salt = 'j4H9?s0d'; /* Constructor */ function __construct() { } /* Functions */ function validateLogin($user, $pass) { // access db global $Database; // create query if ($stmt = $Database->prepare("SELECT * FROM users WHERE username = ? AND password = ?")) { $stmt->bind_param("ss", $user, md5($pass . $this->salt)); $stmt->execute; $stmt->store_result(); // check for num rows if ($stmt->num_rows > 0) { // success $stmt->close(); return TRUE; } else { // failure $stmt->close(); return FALSE; } } else { die("ERROR: Could not prepare MySQLi statement."); } } function checkLoginStatus() { if (isset($_SESSION['loggedin'])) { return TRUE; } else { return FALSE; } } function logout() { session_destroy(); session_start(); } } 

Solutions Collecting From Web of "Строгие стандарты: только переменные должны передаваться по ссылке в m_auth"

bind_param – это ссылки на переменные. Вы не можете использовать md5() . Сначала вам нужно сохранить его в переменной.

 $userPass = md5($pass . $this->salt); $stmt->bind_param("ss", $user, $userPass); 

Проблема в том, что третий параметр является результатом вызова функции:

md5($pass . $this->salt)

Вам нужно сохранить это значение в переменной, прежде чем передавать его в bind_param чтобы его можно было передать по ссылке.

Пример:

 $password = md5($pass . $this->salt); $stmt->bind_param("ss", $user, $password); 

Кроме того, не используйте md5 для хэш-паролей .

Добавить круглые скобки:

 $stmt->bind_param("ss", $user, (md5($pass . $this->salt))); 

Вероятно, это было исправлено в PHP 5.4 как часть разбора функций Array (FAD) ( версия 300266 ).

Альтернативно в качестве обходного пути попробуйте добавить дополнительные скобки, например

 $stmt->bind_param("ss", $user, (md5($pass . $this->salt))); 

который будет разыменовывать возврат метода / функции, см.: (<5.6) Иногда значимые круглые скобки .