2017-10-30 5 views
-2

への移行は、これがデータベースへの正しい接続方法ですか?手続き型MySQLiインターフェースからオブジェクトベースの

<?php 

class Connect { 

private $servername; 
private $serveruser; 
private $password; 
private $database; 

    function __construct($servername, $serveruser, $password, $database) 
    { 
     $this->servername = $servername; 
     $this->serveruser = $serveruser; 
     $this->password = $password; 
     $this->database = $database; 
    } 

    function conn() 
    { 

     try { 
     $conn = new mysqli($servername, $serveruser, $password, $database); 
     echo "conn success"; 
     } 
     catch(Exception $e) 
     { 
     echo "ERROR: " . $e->getMessage();  
     } 
    } 

} 
?> 

そして、私は他の.phpファイルで$ CONNにアクセスする必要があるならば、私は、手続きの方法から、実施例をどのように行うだろう?$username = mysqli_real_escape_string($conn,$_POST['username']);この文字列は、我々はOOPメソッドを使用する場合のようになりますどのように?

P.S. PDOについて何も言わないでください。

+0

'$ conn'を' conn() 'メソッドのローカルではなく、クラスの非公開属性にします。接続した後、クラス内の他のメソッドは '$ this-> conn'を参照できます。 –

+1

MySQLiがエラー時に例外をスローする可能性があります:http://php.net/manual/en/mysqli-driver.report-mode.php ..いいえ、正しい方法ではありません。あなたはクラスのラッパーを作ろうとしていますが、それはすでに完全にサービス可能です。そしてその愚かな古代の「本当のエスケープ」機能の代わりに、[prepared statements](https://www.youtube.com/watch?v=nLinqtCfhKY)を使うべきです。 –

+1

また、[詳しい説明書を読む](http://php.net/manual/en/mysqli.real-escape-string.php)をご覧ください。コード例は、準備されたステートメントを使用する代わりに安全でないオプションを使用することを主張する場合、エスケープ関数、イベントを呼び出すためのオブジェクト指向インターフェイスの使用方法を示しています。/ –

答えて

-2

既存のコードを使用すると、これが接続インスタンスを維持する唯一の方法かもしれないと思います。あなたが毎回(new Connect(...))->conn()をしたくないならば、私は意味します。

<?php 

class Connect 
{ 
    private $servername; 
    private $serveruser; 
    private $password; 
    private $database; 

    private static $conn = null; 

    function __construct($servername, $serveruser, $password, $database) 
    { 
     $this->servername = $servername; 
     $this->serveruser = $serveruser; 
     $this->password = $password; 
     $this->database = $database; 
    } 

    function conn() 
    { 

     try { 
     $conn = new mysqli($servername, $serveruser, $password, $database); 
     self::$conn = $conn; 

     echo "conn success"; 
     } 
     catch(Exception $e) 
     { 
     echo "ERROR: " . $e->getMessage();  
     } 
    } 

    public static function instance() 
    { 
     if (! self::$conn) 
     { 
      # Initialize 
      # (new static(...))->conn(); 
     } 
     return self::$conn; 
    } 

} 

# In your other *.php files 
$username = mysqli_real_escape_string(Connect::instance(),$_POST['username']); 
0

これはコードが実際にどのように表示されるかです。

<?php 
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 
$conn = new mysqli("host","username","password","database"); 
関連する問題