exec("DROP TABLE IF EXISTS `students`"); } $pdo->exec(" CREATE TABLE IF NOT EXISTS `students` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(100) NOT NULL, `email` VARCHAR(100) NOT NULL, `phone` VARCHAR(20) DEFAULT NULL, `birthday` DATE DEFAULT NULL, `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci "); // Đảm bảo có cột phone và birthday nếu bảng đã được tạo từ phiên bản cũ $cols = $pdo->query("SHOW COLUMNS FROM `students`")->fetchAll(PDO::FETCH_COLUMN); if (!in_array('phone', $cols, true)) { $pdo->exec("ALTER TABLE `students` ADD COLUMN `phone` VARCHAR(20) DEFAULT NULL AFTER `email`"); } if (!in_array('birthday', $cols, true)) { $pdo->exec("ALTER TABLE `students` ADD COLUMN `birthday` DATE DEFAULT NULL AFTER `phone`"); } $count = (int)$pdo->query("SELECT COUNT(*) FROM `students`")->fetchColumn(); if ($count === 0) { $stmt = $pdo->prepare("INSERT INTO `students` (`name`, `email`, `phone`, `birthday`) VALUES (:name, :email, :phone, :birthday)"); foreach (getLab04SampleStudents() as $row) { $stmt->execute([ ':name' => $row[0], ':email' => $row[1], ':phone' => $row[2], ':birthday' => $row[3], ]); } } } /** * Hiển thị thông báo lỗi kết nối MySQL thân thiện kèm hướng dẫn cấu hình */ function renderLab04DbError(Throwable $e, string $rootUrl = '../../index.php'): void { ?>
⚠️ Không thể kết nối Cơ sở dữ liệu MySQL!

Chi tiết lỗi: getMessage()) ?>


Hướng dẫn khắc phục nhanh:

⚙️ Về trang chủ cấu hình MySQL
'Bài 01: Kết nối PDO', 'Bai02' => 'Bài 02: Tạo bảng & Mẫu', 'Bai03' => 'Bài 03: Danh sách SV', 'Bai04' => 'Bài 04: Thêm SV', 'Bai05' => 'Bài 05: Xóa SV', 'Bai06' => 'Bài 06: Sửa SV', 'Bai07' => 'Bài 07: Phân trang', 'Bai08' => 'Bài 08: Cột Birthday', 'Bai09' => 'Bài 09: Tìm kiếm', 'Bai10' => 'Bài 10: CRUD Prepared', 'Bai11' => 'Bài 11: Sắp xếp (Sort)', ]; ?>
$label): ?>