Что я делаю не так, чтобы получить эту фатальную ошибку - PullRequest
0 голосов
/ 07 сентября 2011

Мой код:

<?php

$conn = new MySQLi("localhost", "root", "", "barman");

function validate_details($user, $pass){

$sql = "SELECT * FROM users";
$result = $conn->query($sql);

    if($user==$row->user && isset($user)){

        if($pass == $row->pass && isset($pass)){
            return true;
        }
    }else{
        return false;
    }


} 


?>

Ошибка:

Неустранимая ошибка: вызов функции-члена query () для необъекта в C: \ xampp \ htdocs \ barman \ assets \ login \ functions.php в строке 8 (строка 8 - это $ result = $ conn-> запроса ($ SQL); )

Ответы [ 3 ]

6 голосов
/ 07 сентября 2011

вы не можете использовать переменные или объекты вне вашей функции, кроме тех, которые установлены глобально.

попробуй использовать

function validate_details($user, $pass){
    global $conn;
    ......................
}
2 голосов
/ 07 сентября 2011

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

Либо передайте переменную $conn в качестве аргумента функции (это предпочтительный вариант), либо используйте ключевое слово 1006 * *, чтобы импортировать ее в область действия функции.

Чтобы вы могли сделать: (предпочтительный вариант)

function validate_details ($conn, $user, $pass) {
  // function code goes here
}

// Call the function like this
$result = validate_details($conn, 'myuser', 'mypass');

... или это ... (не очень хорошо)

function validate_details ($user, $pass) {
  global $conn;
  // function code goes here
}

Есть много причин, по которым лучше передавать объект подключения в качестве параметра, но вот пара:

  • Это означает, что вы можете использовать свою функцию с более чем одним соединением в одном сценарии
  • Это означает, что вы можете легко перезапустить функцию без изменений в других скриптах
  • Если в какой-то момент вам нужно переименовать переменную $conn в глобальной области видимости, вам не нужно беспокоиться об изменении ее в функции

Полагаю, также стоит упомянуть массив $GLOBALS - это superglobal (то есть он доступен везде), который вы можете использовать вместо этого, но на практике это не так сильно отличается от ключевого слова global и обычно его следует избегать по тем же причинам.

Вы можете использовать это так:

function validate_details ($user, $pass) {
  // ...
  $result = $GLOBALS['conn']->query($sql);
  // ...
}
0 голосов
/ 07 сентября 2011

Используйте global $conn.Иначе это не сработает.:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...