2015-10-21 2 views
0

У меня есть два класса: один для sql и один для аутентификации. Это отдельные файлы, которые только «объединяются» автозагрузчиком в другой файл (index.php). Класс sql выглядит так:Не удается получить идентификатор mysqli из другого класса

class aF_sql { 
    public static $open; 
    public static $char; 
    public static $close; 

    public static function open() { 
     global $config; 

     self::$open = mysqli_connect($config['aF_sql_host'], $config['aF_sql_user'], $config['aF_sql_pass'], $config['aF_sql_data']); 
     if(!self::$open) { 
      die('<b>ERROR (/core/sql/1): Could not initialize database connection</b>'); 
     } 

     self::$char = mysqli_set_charset(self::$open, $config['aF_sql_char']); 
     if(!self::$char) { 
      die('<br>ERROR (/core/sql/2): Could not set database charset</br>'); 
     } 

     return TRUE; 
    } 

    public static function close() { 
     self::$close = mysqli_close(self::$open); 
     if(!self::$close) { 
      die('<b>ERROR (/core/sql/3): Could not close database connection'); 
     } 

     return TRUE; 
    } 
} 

Все работает нормально, пока здесь. Я открываю соединение sql с помощью класса :: open(); метод, и я закрываю его, используя класс :: close() ;. Затем у меня есть файл, который должен помочь мне проверить некоторые данные для входа (класс auth). Пока что все, что я хочу, это эхо поданного имени пользователя. Вот содержание:

class aF_auth { 
    public static function login() { 
     echo mysqli_real_escape_string(aF_sql::open, $_POST['username']); 
    } 
} 

Thisis что говорит об ошибке: Предупреждение: mysqli_real_escape_string() ожидает параметр 1, чтобы быть MySQLi, нуль дано ... Что я должен использовать в качестве идентификатора, чтобы иметь возможность выполнять запросы? Как вы знаете, mysqli требует идентификатор соединения.

Спасибо, миллион

ответ

0

Хорошо, я понял! Вместо того, чтобы возвращать TRUE в классе, я возвращаю self :: $ open. Таким образом, я могу использовать aF_sql :: $ open везде в программном обеспечении и ссылается на идентификатор соединения. С другими словами, это не сработало, потому что я не возвращал переменную в классе ...

class aF_sql { 
public static $open; 
public static $char; 
public static $close; 

public static function open() { 
    global $config; 

    self::$open = mysqli_connect($config['aF_sql_host'], $config['aF_sql_user'], $config['aF_sql_pass'], $config['aF_sql_data']); 
    if(!self::$open) { 
     die('<b>ERROR (/core/sql/1): Could not initialize database connection</b>'); 
    } 

    self::$char = mysqli_set_charset(self::$open, $config['aF_sql_char']); 
    if(!self::$char) { 
     die('<br>ERROR (/core/sql/2): Could not set database charset</br>'); 
    } 

    return self::$open; 
} 

public static function close() { 
    self::$close = mysqli_close(self::$open); 
    if(!self::$close) { 
     die('<b>ERROR (/core/sql/3): Could not close database connection'); 
    } 

    return TRUE; 
} 

mysqli_real_escape_string(aF_sql::$open, $_POST['username']); 

Вот именно ...