O problema com esses tutoriais em vídeo são seus autores que não têm a menor ideia sobre o assunto, tornando o resultado MUITO PIOR do que se você não estivesse usando seus excrementos mentais. O dano que eles estão causando é tão ruim que eu até tive que escrever um artigo dedicado que explica por que todos esses "empacotadores" indefesos são totalmente inutilizáveis para qualquer aplicativo da vida real, As doenças infantis do seu primeiro wrapper de banco de dados .
Tome este wrapper do vídeo, por exemplo:
- O relatório de erros é completamente falho
- Uma função inútil para SELECTs.
- Status
- Instância de PDO protegida
Portanto, em essência, você não conseguirá obter desse "wrapper" nem mesmo uma coisa boba como Insert Id. E nenhum relatório de erros poderia ajudá-lo a perceber o problema.
A partir do seu código, apenas não negocie para economizar digitando uma palavra-chave SQL. É bobo. SQL é uma coisa preciosa, não o descarte em favor de alguns atalhos sem sentido. Nem você deve diminuir o PDO a um estado de inválido aleijado, destruindo seus recursos mais brilhantes.
Seu wrapper deve tornar todos os recursos PDO e SQL acessíveis em vez de descartá-los. Assim vai:
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 wrapper é dez vezes mais simples e ao mesmo tempo dez vezes mais poderoso que o do vídeo.
E agora sua 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>';
}
}
O segredo aqui é que o PDO já pode fornecer dados de objetos, sem uma única linha extra de codificação.
Embora este exemplo simples não seja muito impressionante, o segredo aqui é que este wrapper também servirá para qualquer outro exemplo, quando o do vídeo for sufocante. Tente pensar em qualquer outro exemplo e mostrarei como esse wrapper é simples e poderoso.