2013-07-26 3 views
0

У меня есть 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 сеанса.

Почему это происходит?

+0

Если я понимаю вас правильно ... Вы устанавливаете $ user_id внутри своей функции; который устанавливает локальную переменную в функции, называемую $ user_id. Если вы не возвращаете это из своей функции - и я предполагаю, что вы не, с учетом «return true» в конце - тогда значение теряется. Когда вы установите значение в test.php, конечно, оно будет перезаписано - неважно, как вы его настраиваете в другом месте; если вы явно установите значение 5, то любое более раннее значение будет перезаписано. – andrewsi

+0

Ваши предположения верны. Я просто не понимаю, почему создание другой переменной вне функции check_login() может изменить значение внутри самой функции check_login(). Потому что, когда это происходит, это фактически изменяет значение user_id сеанса. Это та часть, которую я не понимаю. Я установил его в 5, однако, не следует ли изменять переменную $ user_id в функции check_login(), которая не может быть изменена (поскольку она не определена глобально)? – user2620982

+0

Я не уверен, что я последую за тобой. Если вы присваиваете значение '$ user_id', это не должно влиять на сеанс; это должно произойти только в том случае, если вы явно измените значение в сеансе. – andrewsi

ответ

0

Спасибо за помощь! Я наконец-то понял. Для параметра Register_globals установлено значение on. Doh!

Смежные вопросы