Vấn đề với những video hướng dẫn này là tác giả của chúng không có manh mối nào về chủ đề này, khiến kết quả sẽ TỐT HƠN NHIỀU so với việc bạn hoàn toàn không sử dụng phân tinh thần của họ. Thiệt hại mà chúng gây ra tồi tệ đến mức tôi thậm chí đã phải viết một bài riêng giải thích tại sao tất cả các "wrappers" bất lực này hoàn toàn không sử dụng được cho bất kỳ ứng dụng thực tế nào, Các bệnh thời thơ ấu của trình bao bọc cơ sở dữ liệu đầu tiên của bạn .
Ví dụ:lấy trình bao bọc này từ video:
- Báo cáo lỗi hoàn toàn thiếu sót
- Một chức năng vô dụng cho các CHỌN.
- Tính tuyên bố
- Phiên bản PDO được bảo vệ
Vì vậy, về bản chất, bạn sẽ không thể lấy được từ "trình bao bọc" này ngay cả một thứ ngớ ngẩn như Chèn Id. Và không có báo cáo lỗi nào có thể giúp bạn nhận ra vấn đề.
Đối với mã của bạn, chỉ cần không mặc cả để tiết kiệm cho mình việc nhập một từ khóa SQL. Thật là ngớ ngẩn. SQL là một thứ quý giá, đừng bỏ qua nó để ủng hộ một số phím tắt vô nghĩa. Bạn cũng không nên giảm PDO đến trạng thái không hợp lệ tê liệt, loại bỏ các tính năng tuyệt vời nhất của nó.
Trình bao bọc của bạn phải làm cho tất cả các tính năng PDO và SQL có thể truy cập được thay vì loại bỏ chúng. Vì vậy, nó đi:
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;
}
}
trình bao bọc này đơn giản hơn mười lần và đồng thời mạnh hơn mười lần so với trình bao bọc từ video.
Và bây giờ là lớp của bạn
Lịch biểu lớpclass 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>';
}
}
Bí mật ở đây là PDO đã có thể cung cấp cho bạn dữ liệu đối tượng mà không cần thêm một dòng mã nào.
Mặc dù ví dụ đơn giản này không ấn tượng lắm, nhưng bí mật ở đây là trình bao bọc này cũng sẽ phục vụ bạn cho bất kỳ ví dụ nào khác, khi điều đó từ video sẽ bị nghẹt thở. Hãy thử nghĩ đến bất kỳ ví dụ nào khác và tôi sẽ cho bạn thấy trình bao bọc này đơn giản nhưng mạnh mẽ như thế nào.