sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo analizo los datos de objetos de la base de datos MySQL usando PHP PDO?

El problema de estos videotutoriales son sus autores que no tienen ni idea del tema, por lo que el resultado es MUCHO PEOR que si no estuvieras usando sus excrementos mentales. El daño que están infligiendo es tan malo que incluso tuve que escribir un artículo dedicado que explica por qué todos estos "envoltorios" indefensos son totalmente inutilizables para cualquier aplicación de la vida real, Tu primer envoltorio de base de datos de enfermedades infantiles .

Toma este envoltorio del video, por ejemplo:

  • El informe de errores es completamente defectuoso
  • Una función inútil para SELECTs.
  • Estado
  • Instancia de PDO protegida

Entonces, en esencia, no podrá obtener de este "envoltorio" ni siquiera una cosa tan tonta como Insertar Id. Y ningún informe de errores podría ayudarlo a darse cuenta del problema.

A partir de su código, simplemente no negocie por ahorrarse escribiendo una palabra clave SQL. es tonto SQL es una cosa preciosa, no lo descarte a favor de algunos atajos de galimatías. Tampoco se debe rebajar la PDO a un estado de inválido lisiado, destrozando sus características más brillantes.

Su contenedor debe hacer que todas las funciones de PDO y SQL sean accesibles en lugar de descartarlas. Así es:

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

este envoltorio es diez veces más simple y al mismo tiempo diez veces más poderoso que el del video.

Y ahora tu clase

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

El secreto aquí es que PDO ya puede brindarle datos de objetos, sin una sola línea adicional de codificación.

Aunque este ejemplo simple no es muy impresionante, el secreto aquí es que este envoltorio te servirá para cualquier otro ejemplo también, cuando el del video se atragante. Trate de pensar en cualquier otro ejemplo y le mostraré cuán simple pero poderoso es este contenedor.