2013-12-23 2 views
1

Я пытаюсь создать мое соединение db таким образом. В Functions_BD я хотел бы создать соединение с BD и определить все мои функции (Login, Insert, Selects ...). Мой класс выглядит так:Создание MYSQLI только один раз

class functions_BD { 

private $mysqli; 

function __construct() { 
    require_once 'config.php'; 
    $mysqli = new mysqli(DB_HOST,DB_USER,DB_PASSWORD,DB_DATABASE); 

} 

В 'config.php' У меня есть конфигурация моего БД. Тогда у меня есть некоторые общественные функции внутри «Functions_BD» как этот

public function login($user,$passw){   

     $mysqli = new mysqli(DB_HOST,DB_USER,DB_PASSWORD,DB_DATABASE); 

     if (mysqli_connect_errno()) { 
      return 2; 
     } 
     $stmt=$mysqli->prepare("SELECT COUNT(*) FROM users WHERE user= ? AND passw= ? "); 
     $stmt->bind_param('ss', $user,$passw); 
     $stmt->execute(); 
     $result = $stmt->fetch(); 

     if($result>0){   
      return 1; 
     }else{    
      return 0; 
     }   
    } 

Если я определяю $ MySQLi в каждой функции код работает отлично, на мой вопрос: есть ли способ определения $ MySQLi только один раз и использовать его во всех моих функциях? (Как я пытался в конструкторе) Или я могу определить его снова каждый раз, когда я делаю запрос?

+0

Э-э, вы не сохраняете пароли в виде обычного текста, не так ли? –

ответ

1

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

В вас CTOR, просто положить $this->mysqli = new mysqli(...), а затем, в других методах, просто использовать: $this->mysqli->prepare ...

Вы код будет выглядеть примерно так:

<?php 

class functions_BD 
{ 
    private $mysqli; 

    function __construct() 
    { 
    require_once 'config.php'; 
    $this->mysqli = new mysqli(DB_HOST,DB_USER,DB_PASSWORD,DB_DATABASE); 
    } 

    function login($user, $psw) 
    { 
    $stmt = $this->mysqli->prepare("SELECT COUNT(*) FROM users WHERE user= ? AND passw= ? "); 
    $stmt->bind_param('ss', $user,$passw); 
    $stmt->execute(); 
    $result = $stmt->fetch(); 

    return $result > 0; 
    } 
} 
+0

Спасибо, Андрей, это именно то, что я искал =) – Charles

0

Вы можете использовать следуя одноточечна схема:

class functions_BD { 
    private $mysqli; 
    private static $instance; 

    public static function get_instance() { 
    if (!isset(self::$instance)) { 
     self::$instance = new self(); 
    } 
    return self::$instance; 
    } 

    private function __construct() { 
    $this->mysqli = new mysqli(DB_HOST,DB_USER,DB_PASSWORD,DB_DATABASE); 
    } 
} 

Чтобы использовать базу данных, вы можете использовать следующее:

$db = functions_BD::get_instance(); 

Тот же экземпляр будет вызываться во всех ваших кодах.

+0

Singleton очень плохой, очень, очень ... в PHP, singleton не существует и не должен использоваться. – CentaurWarchief

+0

Действительно? Я сомневаюсь. Не могли бы вы объяснить? Я рассматриваю это как субъективный комментарий. В настоящее время многие фреймворки PHP используют шаблон Singleton. – Raptor

+0

Я не могу объяснить моими словами прямо сейчас, но посмотрите там: http://pt.slideshare.net/go_oh/singletons-in-php-why-they-are-bad-and-how-you- can-elim-them-from-your-applications – CentaurWarchief

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