Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak parsować dane obiektowe z bazy danych MySQL przy użyciu PHP PDO?

Problem z tymi samouczkami wideo polega na tym, że ich autorzy nie mają pojęcia na ten temat, co sprawia, że ​​wynik jest DUŻO GORSZY, niż gdybyś w ogóle nie używał ich mentalnych ekskrementów. Szkody, jakie wyrządzają, są tak poważne, że musiałem nawet napisać specjalny artykuł wyjaśniający, dlaczego wszystkie te bezradne „opakowania” są całkowicie bezużyteczne w jakiejkolwiek rzeczywistej aplikacji, Twoje pierwsze choroby wieku dziecięcego wrappera .

Weźmy na przykład to opakowanie z filmu:

  • Zgłaszanie błędów jest całkowicie błędne
  • Bezużyteczna funkcja dla SELECTów.
  • Państwo
  • Chroniona instancja PDO

Tak więc w istocie nie będziesz w stanie uzyskać z tego „opakowania” nawet tak głupiej rzeczy jak Insert Id. I żadne zgłaszanie błędów nie może nawet pomóc w zrozumieniu problemu.

Jeśli chodzi o kod, po prostu nie trać czasu na oszczędzanie na wpisywaniu słowa kluczowego SQL. To jest głupie. SQL to cenna rzecz, nie odrzucaj go na rzecz jakichś bełkotliwych skrótów. Nie powinieneś też umniejszać PDO do stanu kalekiego inwalidy, niszcząc jego najwspanialsze cechy.

Twoje opakowanie powinno udostępniać wszystkie funkcje PDO i SQL, zamiast je odrzucać. Tak to wygląda:

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

ten wrapper jest dziesięć razy prostszy i jednocześnie dziesięć razy silniejszy niż ten z filmu.

A teraz twoja klasa

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

Sekret polega na tym, że PDO może już udostępniać dane obiektu, bez ani jednej dodatkowej linii kodu.

Chociaż ten prosty przykład nie jest zbyt imponujący, sekretem jest to, że to opakowanie posłuży Ci również do każdego innego przykładu, gdy ten z filmu się dławi. Spróbuj pomyśleć o jakimkolwiek innym przykładzie, a pokażę Ci, jak proste, ale potężne jest to opakowanie.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyjaśnij ten wzorzec zużycia pamięci w Amazon RDS/Mysql?

  2. Czy w MySQL powinienem cytować liczby, czy nie?

  3. Hierarchia przechowywania mysql z dużymi drzewami

  4. Jak korzystać z pola z podzapytania w MySQL?

  5. Właściwe zarządzanie zasobami bazy danych:kursorem i połączeniem