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

Bagaimana cara mengurai data objek dari database MySQL menggunakan PHP PDO?

Masalah dengan tutorial video ini adalah penulisnya yang tidak memiliki petunjuk tentang subjeknya, membuat hasilnya JAUH JAUH LEBIH BURUK daripada jika Anda tidak menggunakan kotoran mental mereka sama sekali. Kerusakan yang mereka timbulkan sangat buruk sehingga saya bahkan harus menulis artikel khusus yang menjelaskan mengapa semua "pembungkus" yang tidak berdaya ini sama sekali tidak dapat digunakan untuk aplikasi kehidupan nyata apa pun, Penyakit masa kanak-kanak pembungkus database pertama Anda .

Ambil pembungkus ini dari video misalnya:

  • Pelaporan kesalahan benar-benar cacat
  • Fungsi yang tidak berguna untuk SELECT.
  • Kenegaraan
  • Instance PDO yang dilindungi

Jadi, pada dasarnya, Anda tidak akan bisa mendapatkan dari "pembungkus" ini bahkan hal konyol seperti Sisipkan Id. Dan tidak ada pelaporan kesalahan yang dapat membantu Anda bahkan untuk menyadari masalahnya.

Pada kode Anda, jangan menawar untuk menyelamatkan diri Anda mengetik kata kunci SQL. Ini konyol. SQL adalah hal yang berharga, jangan mengabaikannya demi beberapa pintasan omong kosong. Anda juga tidak boleh mengurangi PDO ke status cacat lumpuh, membuang fitur-fiturnya yang paling cemerlang.

Pembungkus Anda harus membuat semua fitur PDO dan SQL dapat diakses alih-alih membuangnya. Jadi begini:

class DB
{
    protected static $instance;
    protected $pdo;

    protected function __construct() {
            $opt  = array(
                PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
                PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ,
                PDO::ATTR_EMULATE_PREPARES   => FALSE,
            );
            $dsn = 'mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset='.DB_CHAR;
            $this->pdo = new PDO($dsn, DB_USER, DB_PASS, $opt);

    }

    // a classical static method to make it universally available
    public static function instance()
    {
        if (self::$instance === null)
        {
            self::$instance = new self;
        }
        return self::$instance;
    }

    // a proxy to native PDO methods
    public function __call($method, $args)
    {
        return call_user_func_array(array($this->pdo, $method), $args);
    }

    // a helper function to run prepared statements smoothly
    public function run($sql, $args = [])
    {
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute($args);
        return $stmt;
    }
}

pembungkus ini sepuluh kali lebih sederhana dan pada saat yang sama sepuluh kali lebih kuat daripada yang ada di video.

Dan sekarang kelas Anda

class Schedule
{
    private $_db;

    public function __construct()
    {
        $this->_db = DB::instance();
    }

    public function listGames()
    {
        $data = $this->_db->query('SELECT * FROM games')->fetchAll();
        var_dump($data);
        echo '<br>';
    }
}

Rahasianya di sini adalah bahwa PDO sudah dapat memberi Anda data objek, tanpa satu baris pengkodean tambahan.

Meskipun contoh sederhana ini tidak terlalu mengesankan, rahasianya di sini adalah bahwa pembungkus ini akan melayani Anda untuk contoh lain juga, ketika itu dari video akan tersedak. Coba pikirkan contoh lain dan saya akan menunjukkan betapa sederhana namun kuat pembungkus ini.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MASUKKAN ke dalam string DateTime DB

  2. Mengubah Font di MySQL Workbench

  3. Mempercepat penghitungan baris di MySQL

  4. Permintaan Pembaruan MySQL menggunakan gabungan kiri

  5. PHP Membalik urutan hasil dari MySQL DB