У меня есть PHP включают файл, function.php с в следующем фрагменте кода:mysqli bind_param - проблемы с переменной областью?
function check_login($mysqli) {
// Check if all session variables are set
if(isset($_SESSION['user_id'], $_SESSION['username'])) {
$user_id = $_SESSION['user_id'];// current value will be 9
$username = $_SESSION['username'];
if ($stmt = $mysqli->prepare("SELECT password FROM members WHERE user_id = ? LIMIT 1")) {
$stmt->bind_param('i', $user_id);
$stmt->execute();
$stmt->store_result();
//
//
//
return true;
}
}
}
В другом файле, test.php, я исполню
if(check_login($mysqli) == true) //......
а затем дальше вниз в test.php , я установил значение переменной $ user_id
$user_id = "5";
Итак, проблема, в том, что поскольку $ user_id был уже определен в моем файле functions.php как значение из сеанса user_id, он переопределяет фактические данные сеанса.
Это почти как $ user_id в test.php обрабатывает переменную как глобальную, что также приводит к изменению user_id сеанса.
Почему это происходит?
Если я понимаю вас правильно ... Вы устанавливаете $ user_id внутри своей функции; который устанавливает локальную переменную в функции, называемую $ user_id. Если вы не возвращаете это из своей функции - и я предполагаю, что вы не, с учетом «return true» в конце - тогда значение теряется. Когда вы установите значение в test.php, конечно, оно будет перезаписано - неважно, как вы его настраиваете в другом месте; если вы явно установите значение 5, то любое более раннее значение будет перезаписано. – andrewsi
Ваши предположения верны. Я просто не понимаю, почему создание другой переменной вне функции check_login() может изменить значение внутри самой функции check_login(). Потому что, когда это происходит, это фактически изменяет значение user_id сеанса. Это та часть, которую я не понимаю. Я установил его в 5, однако, не следует ли изменять переменную $ user_id в функции check_login(), которая не может быть изменена (поскольку она не определена глобально)? – user2620982
Я не уверен, что я последую за тобой. Если вы присваиваете значение '$ user_id', это не должно влиять на сеанс; это должно произойти только в том случае, если вы явно измените значение в сеансе. – andrewsi