Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Kelas / kode koneksi PDO dan desain kelas

Kurang lebih begini cara saya melakukannya. Saya tidak yakin apakah ini cara terbaik untuk melakukannya, tetapi ini berhasil untuk saya.

Kelas pabrik saya adalah INTI dari kode saya. Dari sini saya menghasilkan semua kelas tempat saya bekerja. Kelas pabrik saya disimpan dalam file terpisah factory.class.php .

Dengan memiliki kelas pabrik, saya hanya perlu memasukkan file kelas hanya sekali. Jika saya tidak memiliki ini, saya harus menyertakan file kelas saya untuk setiap file yang harus menggunakannya. Jika saya perlu memperbarui nama file kelas nanti, saya hanya perlu membuat pembaruan di file kelas pabrik.

Alasan lain untuk membuat objek pabrik, adalah untuk mengurangi jumlah koneksi DB.

Saya menyimpan setiap kelas sebagai file terpisah

Kelas pabrik

include_once('person.class.php');
include_once('tracking.class.php');
include_once('costAnalyzis.class.php');
include_once('activity.class.php');

class Factory {
  function new_person_obj($id = NULL) { return new Person(Conn::get_conn(), $id); }  
  function new_tracking_obj($id = NULL) { return new Tracking(Conn::get_conn(), $id); }
  function new_costAnalyzis_obj() { return new CostAnalyzis(Conn::get_conn()); }
  function new_activity_obj() { return new Activity(Conn::get_conn()); }
}    

Kelas koneksi

// I have this class in the same file as Factory class
// This creates DB connection and returns any error messages
class Conn {
  private static $conn = NULL;

  private function __construct() {}

  private static function init() {
      $conf = self::config();
      try { 
        self::$conn = new PDO($conf['dsn'], $conf['user'], $conf['pass'], array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
      } 
      catch (PDOException $e) {
        // We remove the username if we get [1045] Access denied
        if (preg_match("/\b1045\b/i", $e->getMessage())) 
          echo "SQLSTATE[28000] [1045] Access denied for user 'name removed' @ 'localhost' (using password: YES)";
        else
          echo $e->getMessage();  
      }
  }

  public static function get_conn() {
    if (!self::$conn) { self::init(); }
    return self::$conn;
  }

  // I used to get login info from config file. Now I use Wordpress constants
  private static function config() {
    $conf = array();

    $conf['user']    = DB_USER; //$config['db_user'];
    $conf['pass']    = DB_PASSWORD; //$config['db_password'];
    $conf['dsn']     = 'mysql:dbname='.DB_NAME.';host='.DB_HOST;

    return $conf;
  }  
}

Objek kelas yang berbeda

Ini adalah kelas Anda. Di sinilah Anda bekerja dengan data Anda Dalam kode saya sendiri, saya menggunakan arsitektur tri-tier, memisahkan presentasi, dari lapisan bisnis dan lapisan objek data.

class Person extends PersonDAO {

  function getPersonData($id) {
    $result = parent::getPersonData($id);

    // Here you can work with your data. If you do not need to handle data, just return result
    return $result;
  }
}


// I only have SQL queries in this class and I only return RAW results.
class PersonDAO {

  // This variable is also available from you mother class Person 
  private $db;

    // Constructor. It is automatically fired when calling the function.
    // It must have the same name as the class - unless you define 
    // the constructor in your mother class.
    // The &$db variable is the connection passed from the Factory class.
    function PersonDAO (&$db) {
      $this->db = &$db;
    }


  public function get_data($id) {
     $sql ="SELECT a, b, c
          FROM my_table
          WHERE id = :id";

     $stmt = $this->db->prepare($sql);
     $stmt->execute(array(':id'=> $id));
     $result = $stmt->fetchAll(PDO::FETCH_ASSOC);

     return $result;
  }

  public function get_some_other_data() {
    $sql ="SELECT a, b, c
          FROM my_table_b";

    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);

    return $result;      
  }
}

Lakukan hal yang sama untuk kelas Anda yang lain.

Menggabungkan semuanya

Perhatikan bahwa kami hanya menyertakan satu file, file pabrik. Semua file kelas lainnya disertakan dalam file kelas Pabrik.

// Include factory file
include_once('factory.class.php');

//Create your factory object
$person = Factory::new_person_obj();

//Get person data
$data = $person->getPersonData('12');

// output data
print_r($data);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sql:pilih semua keranjang yang berisi satu set item tertentu

  2. Temukan baris dengan nilai maksimum id di MySQL

  3. MySQL Sum() beberapa kolom

  4. Bagaimana Anda menghapus MySQL dari Mac OS X?

  5. Hapus catatan duplikat dari tabel tanpa pk atau id atau kolom unik di mysql