нулевая переменная в классе Php - PullRequest
1 голос
/ 08 июня 2011

Я очень новичок в php, поэтому у меня очень острая проблема.Я пытаюсь написать класс, который поможет мне в работе с БД.Код здесь:

<?php
    class DbHelper{
        private $databaseURL;
        private $databaseUName;
        private $databasePWord;
        private $databaseName;
        private $nameOfDbWithWorkers;
        private $connection;

        function __construct($dbURL, $dbUserName, $dbPword, $dbName, $nameOfDbWithWorkers){
            $this->databaseURL = $dbURL;
            $this->databaseUName = $dbUserName;
            $this->databasePWord = $dbPword;
            $this->databaseName = $dbName;
            $this->nameOfDbWithWorkers = $nameOfDbWithWorkers;
        }

        function setConnectionToDb(){
            $connection = mysql_connect($this->databaseURL,$this->databaseUName,$this->databasePWord) OR DIE("can't connect to DB"); 
            mysql_select_db($this->databaseName, $connection)or die ("Error while connecting to database");
        }

        function getUser($login, $pass){
            $query = "SELECT type FROM $this->nameOfDbWithWorkers WHERE login = '$login' and password = '$pass';"; 
            $queryResult = $this->getDataFromDbByQuery($query);
            echo $queryResult;
            if ((mysql_affected_rows($connection) == 1)){
                $meta = mysql_fetch_assoc($queryResult);
                if ($meta['type']=='admin'){
                    return 'admin';
                }
                if ($meta['type']=='user'){
                    return 'user';
                }
                else{
                    return 'nomatch';
                }
            }
            else{               
                 return 'nomatch';
            }           
        }

        function getDataFromDbByQuery($query){
            $this->setConnectionToDb();
            $result = mysql_query($query);
            mysql_close($connection);
            return $result;
        }
}
?>

Я использую метод getUser, но возникает проблема - $connection = null в методе getUser и в getDataFromDbByQuery.Почему так?

Ответы [ 2 ]

5 голосов
/ 08 июня 2011

Потому что простая переменная всегда локальна (за исключением того, что вы делаете ее глобальной, используя global, но не привыкайте к этому;)). То, что вы, вероятно, ищете, является собственностью. Вы уже определили private $connection, но просто с помощью $connection в своих методах вы его не используете, но пытаетесь получить доступ к неопределенной локальной переменной

    function setConnectionToDb(){
        $this->connection = mysql_connect($this->databaseURL,$this->databaseUName,$this->databasePWord) OR DIE("can't connect to DB"); 
        mysql_select_db($this->databaseName, $this->connection)or die ("Error while connecting to database");
    }

    //..
    function getUser($login, $pass){
        $query = "SELECT type FROM $this->nameOfDbWithWorkers WHERE login = '$login' and password = '$pass';"; 
        $queryResult = $this->getDataFromDbByQuery($query);
        echo $queryResult;
        if ((mysql_affected_rows($this->connection) == 1)){
            // ...
        }
    }

и так далее. Просто замените все $connection на $this->connection.

4 голосов
/ 08 июня 2011

Попробуйте заменить $connection на $this->connection.

$connection относится к переменной с локальной областью , т. Е. Той, которая не будет доступна вне текущей функции.in. $this->connection относится к переменной-члену класса, который вы определили с помощью private $connection.

...