2016-03-23 14 views
0
class DBAcess{ 
    private $_mysql_connection; 
    function db_access(){ 
     $this->_mysql_connection = mysqli_connect('localhost', 'root', 'aaaaa', 'test') or die('cant connect to the db server'); 
    } 
    function display_user($user_id){ 
     $sql = "SELECT * FROM email WHERE id = '$user_id'"; 
     $db_handle = mysqli_query($this->_mysql_connection, $sql) or die('cant query db'); 
     $num_count = mysqli_num_rows($db_handle); 
     if($num_count != 1){ 
      echo 'no record'; 
     }else{ 
      while($row = mysqli_fetch_array($db_handle)){ 
      echo $row['email']; 
     }  
     } 

    } 

} 


    $db_operation = new DBAcess(); 
    $db_operation->db_access(); 
    $db_operation->display_user(1); 
+0

私はあなたの実際の質問への答えは、あなたが既に例えばhttpsを行い、オープンソース・モジュール使用すること – RiggsFolly

+0

NOだと思うですが//github.com/joshcam/PHP-MySQLi-Database-Class – FastTurtle

答えて

1

これが良い習慣であるかどうかを尋ねているなら、それはうまくいくが、このコードには保守が難しい問題がある。 データベースクラスでは、接続の処理、クエリの実行、挿入IDの取得、およびそれらのクエリの結果の書式設定などのヘルパメソッドのみを処理する必要があります。 ユーザークラスはデータベースクラスを呼び出してクエリを実行し、ユーザー情報を取得する必要があります。 また、データベース資格情報を設定ファイルに移動することを検討することもできます。それらを定数として宣言すると、_DB_SERVER_、_DB_USER_などを使用できます。

+0

あなたのコードをメンテナンス可能にする方法を学ぶためのリンクリソースはありませんか? –

+0

普及しているオープンソースのPHPプロジェクトは、コードを研究して、そのようなコードを書く方法と理由を理解しようとします。実際の問題を解決する実際のプロジェクトから来るので、チュートリアルよりもはるかに多くを提供します。 – Eihwaz

0

個人的には、データベースのテーブルの後にクラスをモデル化し、別のデータベースクラスを使用して重い作業を行います。 DBクラスがオンデマンドクエリのみを実行している場合は静的に処理し、ハンドルが保存されているかどうかを気にしないで、複数のクエリを実行するためにDBクラスをインスタンス化することもあります。以下の例では、静的にDBを呼び出してコードを保存する方法を使用していますが、アプリケーションに適合していると確信しています。

また、PDOライブラリを使用してデータベースを処理することを強くお勧めします。ほとんどの場合、すべてのドライバで同じコードを使用することができますが、動作の例外はいくつか存在します。また、表示されているように照会を準備すると、データベースまたはWebからの入力に注意する必要がなくなります。したがって、SQLインジェクションは問題ではありません。

私はこれを実行しようとしていないが、大きな画像があり、少なくとも

<?php 

class User { 
    // Don't know your fields, these are examples 
    private $first_name; 
    private $last_name; 
    private $email; 
    private $id; 

    public function __construct($user_id = NULL){ 
     if(!empty($user_id)){ 
      $this->loadFromDB($user_id); 
     } 
    } 

    public function loadFromDB($id){ 
     $sql = 'SELECT * FROM email WHERE id = :id'; 

     $result = Database::query($sql,[':id'=>$id]); 
     if(sizeof($result) !== 1){ 
      throw new Exception("Failed to load user or user not found"); 
     } 

     $this->first_name = $result[0]["first_name"]; 
     $this->last_name = $result[0]["lastname"]; 
     $this->email = $result[0]["email"]; 
     $this->id = $id; 


    } 

    public function display(){ 
     echo $this->email; 
    } 
} 

class Database { 

    public static function query($sql, $params){ 
     try{ 
      $db = new PDO('mysql:dbname=test;host=127.0.0.1;charset=UTF8','root','aaaa'); 
     } 
     catch(PDOException $e){ 
      echo 'Connection failed: ' . $e->getMessage(); 
     } 

     $stmt = $db->prepare($sql); 
     $stmt->execute($params); 
     $result = $stmt->fetchAll(); 

     return $result; 
    } 
} 

$user = new User(1); 
$user->display(); 
関連する問題