Я работаю над системой входа для проекта с использованием программирования 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(); } }
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) Иногда значимые круглые скобки .