2013-12-23 4 views
1

이렇게 db 연결을 만들려고합니다. Functions_BD에서 BD에 대한 연결을 만들고 모든 기능 (로그인, 삽입, 선택 ...)을 정의하고 싶습니다. 내 수업은 다음과 같습니다 :한 번만 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'에 DB 구성이 있습니다. 나는 코드가 잘 작동 기능을 각각 $ mysqli를 정의하면 그럼이 하나

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; 
     }   
    } 

처럼 "Functions_BD"내부의 공공 기능을 가지고, 내 질문은 : 한 번만 $ 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를 사용하려면, 다음을 사용할 수 있습니다

$db = functions_BD::get_instance(); 

동일한 인스턴스가 모든 코드에서 호출됩니다.

+0

싱글 톤은 매우 나쁘고, 매우, 매우 ... PHP에서는 싱글 톤이 존재하지 않으므로 사용해서는 안됩니다. – CentaurWarchief

+0

정말요? 나는 의심한다. 설명해 주시겠습니까? 나는 이것을 주관적인 코멘트로 취급한다. 오늘날 많은 PHP 프레임 워크가 Singleton 패턴을 사용합니다. – Raptor

+0

나는 내 말을 지금 설명 할 수는 없지만 거기를 보아라. http://pt.slideshare.net/go_oh/singletons-in-php-why-they-are-bad-and-how-you- 귀하의 응용 프로그램에서 제거 할 수 있습니다 – CentaurWarchief