Trước khi tạo database thì bạn phải kết nối CSDL trước, sau đó viết câu truy vấn tạo Database và thực thi câu truy vấn đó bằng PHP. Nếu quên hãy xem lại các bài học trước nhé!

1. Tạo CSDL MySQL với PHP

Câu lệnh CREATE DATABASE được sử dụng để tạo cơ sở dữ liệu trong MySQL. Các ví dụ sau tạo cơ sở dữ liệu có tên “myDB”.

1.1. Sử dụng MySQLi hướng đối tượng (MySQLi Object-oriented)

Bạn có thể tham khảo cách làm như sau:

<?php
$servername = "localhost";
$username = "username";
$password = "password";
// Tạo kết nối
$conn = new mysqli($servername, $username, $password);
// Kiểm tra kết nối
if ($conn->connect_error) {
  die("Kết nối thất bại: " . $conn->connect_error);
}
// Tạo nên cơ sở dữ liệu
$sql = "CREATE DATABASE myDB";
if ($conn->query($sql) === TRUE) {
  echo "Cơ sở dữ liệu được tạo thành công";
} else {
  echo "Lỗi khi tạo cơ sở dữ liệu: " . $conn->error;
}
$conn->close();
?>

Một số lưu ý nhỏ:

Khi tạo cơ sở dữ liệu mới, bạn chỉ phải chỉ định ba đối số đầu tiên cho đối tượng mysqli (servername, username and password).

Khi ta sử dụng lệnh tạo database thì ta chỉ kết nối vào MySQL và không được chọn database, nghĩa là sẽ chỉ được phép truyền vào ba tham số host, username và password. Trường hợp mà ta có sử dụng port thì phải truyền tham số port vào, nhưng tham số tên database thì ta truyền giá trị rỗng mysqli(“localhost”, “username”, “password”, “”, port).

1.2. Sử dụng MySQLi hướng thủ tục (MySQLi Procedural)

Các bạn có thể tham khảo cách làm sau:

<?php
$servername = "localhost";
$username = "username";
$password = "password";
// Tạo kết nối
$conn = mysqli_connect($servername, $username, $password);
// Kiểm tra kết nối
if (!$conn) {
  die("Kết nối thất bại: " . mysqli_connect_error());
}
// Tạo nên cơ sở dữ liệu
$sql = "CREATE DATABASE myDB";
if (mysqli_query($conn, $sql)) {
  echo "Cơ sở dữ liệu được tạo thành công";
} else {
  echo "Lỗi khi tạo cơ sở dữ liệu: " . mysqli_error($conn);
}
mysqli_close($conn);
?>

1.3. Sử dụng PDO

Ví dụ PDO sau tạo cơ sở dữ liệu có tên “myDBPDO”:

<?php
$servername = "localhost";
$username = "username";
$password = "password";
try {
  $conn = new PDO("mysql:host=$servername", $username, $password);
  // đặt chế độ lỗi PDO thành ngoại lệ
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  $sql = "CREATE DATABASE myDBPDO";
  // sử dụng execute () vì không có kết quả nào được trả về
  $conn->exec($sql);
  echo "Cơ sở dữ liệu được tạo thành công<br>";
} catch(PDOException $e) {
  echo $sql . "<br>" . $e->getMessage();
}
$conn = null;
?>

Lưu ý

Trường hợp này có một vấn đề như ở bài trước mình có trình bày đó là bạn phải truyền tên database vào chuỗi kết nối. Nhưng với trường hợp này thì ta không cần truyền tên database vào bởi vì ta đang sử dụng lệnh tạo database.

Một lợi ích tuyệt vời của PDO là nó có lớp ngoại lệ để xử lý bất kỳ vấn đề nào có thể xảy ra trong các truy vấn cơ sở dữ liệu của chúng ta. Nếu một ngoại lệ được đưa ra trong khối try {}, tập lệnh sẽ ngừng thực thi và chuyển trực tiếp đến khối catch () {} đầu tiên. Trong khối bắt ở trên, mình đã lặp lại câu lệnh SQL và thông báo lỗi đã tạo.

2. Tạo bảng trong MySQL bằng code PHP

2.1. Tạo bảng MySQL

Câu lệnh CREATE TABLE được sử dụng để tạo bảng trong MySQL. Mình sẽ tạo một bảng có tên “MyGuests”, với năm cột: “id”, “firstname”, “lastname”, “email” và “reg_date”:

CREATE TABLE MyGuests (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)

Mình sẽ giải thích về ví dụ trên:

  • NOT NULL: Mỗi hàng phải chứa một giá trị cho cột đó, giá trị rỗng không được phép
  • DEFAULT value: Đặt giá trị mặc định được thêm vào khi không có giá trị nào khác được chuyển
  • UNSIGNED: Được sử dụng cho các loại số, giới hạn dữ liệu được lưu trữ ở số dương và số 0
  • AUTO INCREMENT – MySQL tự động tăng giá trị của trường lên 1 mỗi khi một bản ghi mới được thêm vào
  • PRIMARY KEY – khóa chính: Được sử dụng để xác định duy nhất các hàng trong bảng. Cột có cài đặt PRIMARY KEY thường là số ID và thường được sử dụng với AUTO_INCREMENT

Mỗi bảng phải có một cột khóa chính (trong trường hợp này là cột “id”). Giá trị của nó phải là duy nhất cho mỗi bản ghi trong bảng.

2.2. Sử dụng MySQLi hướng đối tượng(Object-oriented)

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Tạo kết nối
$conn = new mysqli($servername, $username, $password, $dbname);
// Kiểm tra kết nối
if ($conn->connect_error) {
  die("Kết nối thất bại: " . $conn->connect_error);
}
// sql để tạo bảng
$sql = "CREATE TABLE MyGuests (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)";
// Thực thi câu truy vấn
if ($conn->query($sql) === TRUE) {
  echo "Tạo bảng thành công";
} else {
  echo "Lỗi khi tạo bảng: " . $conn->error;
}
// Ngắt kết nối
$conn->close();
?>

2.3. Sử dụng MySQLi hướng thủ tục (Procedural)

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Kết nối
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Kiểm tra kết nối 
if (!$conn) {
  die("Kết nối thất bại: " . mysqli_connect_error());
}
//Câu lệnh SQL
$sql = "CREATE TABLE MyGuests (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)";
//Thực thi câu truy vấn
if (mysqli_query($conn, $sql)) {
  echo "Tạo bảng thành công";
} else {
  echo "Lỗi khi tạo bảng: " . mysqli_error($conn);
}
Ngắt kết nối
mysqli_close($conn);
?>

2.4. Sử dụng PDO

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";
try {
  $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
  // Thiết lập chế độ exception
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  //  Câu lệnh SQL
  $sql = "CREATE TABLE MyGuests (
  id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  firstname VARCHAR(30) NOT NULL,
  lastname VARCHAR(30) NOT NULL,
  email VARCHAR(50),
  reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
  )";
  // Thực thi câu truy vấn
  $conn->exec($sql);
  echo "Tạo table thành công";
} catch(PDOException $e) {
  echo $sql . "<br>" . $e->getMessage();
}
//ngắt kết nối
$conn = null;
?>

3. Kết hợp tạo bảng với tạo Database bằng PHP

Bây giờ mình sẽ đưa ra một ví dụ về cách kết hợp tạo database và tạo table cùng trên một file PHP. Để các bạn dễ hiểu thì mình sẽ lấy thư viện MySQLi hướng thủ tục để làm ví dụ nhé.

<?php  
// BƯỚC 1: TẠO DATABASE
// Tạo kết nối
$conn = mysqli_connect('localhost', 'root', 'vertrigo');  
// Nếu kết nối thất bại
if (!$conn) {
    die("Kết nối thất bại: " . mysqli_connect_error());
}  
// Lệnh tạo database
$sql = "CREATE DATABASE LTTDDemo";  
// Thực thi câu truy vấn
if (mysqli_query($conn, $sql)) 
{
    echo 'Tạo database thành công!';     
    // BƯƠC 2: TẠO TABLE
    // Chọn database
    mysqli_select_db($conn, 'LTTDDemo');  
    // Câu lệnh SQL
    $sql = "CREATE TABLE News (
        id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
        title VARCHAR(30) NOT NULL,
        content TEXT,
        add_date TIMESTAMP
    )";  
    // Thực thi câu truy vấn
    if (mysqli_query($conn, $sql)) {
        echo "Tạo table thành công";
    } else {
        echo "Tạo table thất bại: " . mysqli_error($conn);
    }     
} else {
    echo "Tạo database thất bại: " . mysqli_error($conn);
} 
// Tạo xong thì ngắt kết nối
mysqli_close($conn);
?>