Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment analyser les données d'objet de la base de données MySQL à l'aide de PHP PDO ?

Le problème avec ces didacticiels vidéo, c'est que leurs auteurs n'ont aucune idée sur le sujet, ce qui rend le résultat BEAUCOUP BIEN PIRE que si vous n'utilisiez pas du tout leurs excréments mentaux. Les dégâts qu'ils infligent sont si graves que j'ai même dû écrire un article dédié qui explique pourquoi tous ces "wrappers" impuissants sont totalement inutilisables pour n'importe quelle application réelle, Les maladies infantiles de votre premier wrapper de base de données .

Prenez cet emballage de la vidéo par exemple :

  • Le rapport d'erreur est complètement défectueux
  • Une fonction inutile pour les SELECT.
  • Statut
  • Instance PDO protégée

Donc, en substance, vous ne pourrez pas obtenir de ce "wrapper" même une chose aussi stupide que Insert Id. Et aucun rapport d'erreur ne pourrait même vous aider à réaliser le problème.

À partir de votre code, ne négociez pas pour vous épargner la saisie d'un mot-clé SQL. C'est idiot. SQL est une chose précieuse, ne le rejetez pas au profit de quelques raccourcis charabia. Vous ne devriez pas non plus réduire PDO à un état d'invalide paralysé, en supprimant ses caractéristiques les plus brillantes.

Votre wrapper doit rendre toutes les fonctionnalités PDO et SQL accessibles au lieu de les supprimer. Alors ça se passe :

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

ce wrapper est dix fois plus simple et en même temps dix fois plus puissant que celui de la vidéo.

Et maintenant ta classe

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

Le secret ici est que PDO peut déjà vous donner des données d'objet, sans une seule ligne de codage supplémentaire.

Bien que cet exemple simple ne soit pas très impressionnant, le secret ici est que cet emballage vous servira également pour tout autre exemple, lorsque celui de la vidéo s'étouffera. Essayez de penser à n'importe quel autre exemple et je vous montrerai à quel point cet emballage est simple mais puissant.