sql >> Database teknologi >  >> RDS >> Mysql

Hvordan analyserer jeg objektdata fra MySQL-databasen ved hjælp af PHP PDO?

Problemet med disse video-tutorials er deres forfattere, som ikke har nogen anelse om emnet, hvilket gør resultatet MEGET MEGET VÆRRE, end hvis du slet ikke brugte deres mentale ekskrementer. Skaden, de påfører, er så slem, at jeg endda var nødt til at skrive en dedikeret artikel, der forklarer, hvorfor alle disse hjælpeløse "indpakninger" er totalt ubrugelige til enhver virkelighedsapplikation, Din første databaseindpaknings børnesygdomme .

Tag denne indpakning fra videoen for eksempel:

  • Fejlrapportering er fuldstændig mangelfuld
  • En ubrugelig funktion til SELECT.
  • Statefulness
  • Beskyttet PDO-instans

Så i det væsentlige vil du ikke være i stand til at komme fra denne "indpakning" selv en så dum ting som Insert Id. Og ingen fejlrapportering kunne hjælpe dig med at indse problemet.

Med din kode skal du bare ikke forhandle for at spare dig selv ved at skrive et SQL-nøgleord. Det er fjollet. SQL er en værdifuld ting, afvis det ikke til fordel for nogle vrøvl-genveje. Du bør heller ikke formindske PDO til en tilstand af en forkrøblet invalid, der kasserer dens mest geniale funktioner.

Din indpakning skal gøre alle PDO- og SQL-funktioner tilgængelige i stedet for at kassere dem. Så det fortsætter:

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

denne indpakning er ti gange enklere og samtidig ti gange mere kraftfuld end den fra videoen.

Og nu din klasse

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

Hemmeligheden her er, at PDO allerede kan give dig objektdata, med ikke en eneste ekstra linje kodning.

Selvom dette simple eksempel ikke er særlig imponerende, er hemmeligheden her, at denne indpakning også vil tjene dig til ethvert andet eksempel, når det fra videoen vil kvæle. Prøv at tænke på et hvilket som helst andet eksempel, og jeg vil vise dig, hvor enkel, men alligevel kraftfuld denne indpakning er.




  1. Bruger MySQL indeks til sortering?

  2. Rails 3 ignorerer Postgres unikke begrænsningsundtagelse

  3. (Java) Korrekt brug af kommandolinjeudførelse

  4. Hvordan indstiller jeg første dag i ugen til mandag, når jeg bruger Week(Date) i PHP/MySQL?