Làm việc với MySQL trong PHP

Với PHP, bạn có thể dễ dàng kết nối và thao tác với cơ sở dữ liệu.

MySQL là hệ thống cơ sở dữ liệu phổ biến nhất được sử dụng với PHP.

MySQL là gì?

  • MySQL là một hệ thống cơ sở dữ liệu được sử dụng trên web.
  • MySQL là một hệ thống cơ sở dữ liệu chạy trên máy chủ.
  • MySQL là lý tưởng cho cả ứng dụng nhỏ và lớn.
  • MySQL rất nhanh, đáng tin cậy và dễ sử dụng.
  • MySQL sử dụng SQL chuẩn.
  • MySQL là đa nền tảng
  • MySQL là miễn phí để tải về và sử dụng.
  • MySQL được phát triển, phân phối và hỗ trợ bởi tập đoàn Oracle.
  • MySQL được đặt theo tên con gái của người đồng sáng lập Monty Widenius: My.

Dữ liệu trong cơ sở dữ liệu MySQL được lưu trữ trong các bảng. Bảng là tập hợp các dữ liệu liên quan và nó bao gồm các cột và hàng.

Cơ sở dữ liệu rất hữu ích để lưu trữ thông tin theo loại. Ví dụ: một cửa hàng có thể có một cơ sở dữ liệu với các bảng sau:

  • Employees
  • Products
  • Categories
  • Customers
  • Orders
  • OrderItems
  • ...

Kết nối PHP với MySQL

PHP 5 trở lên có thể thao tác với cơ sở dữ liệu MySQL bằng cách sử dụng:

  • Phần mở rộng của MySQLi (chữ "i" là viết tắt của improved - cải tiến)
  • PDO (PHP Data Objects - Đối tượng dữ liệu PHP)
Lưu ý: Các phiên bản trước đây của PHP sử dụng phần mở rộng MySQL để thao tác với cơ sở dữ liệu MySQL. Tuy nhiên, phần mở rộng MySQL này đã lỗi thời từ năm 2012.

Tôi nên sử dụng MySQLi hay PDO?

Nếu bạn cần một câu trả lời ngắn, đó sẽ là "làm bất cứ điều gì bạn thích".

Cả MySQLi và PDO đều có những ưu điểm của chúng:

PDO sẽ hoạt động trên 12 hệ thống cơ sở dữ liệu khác nhau, trong khi MySQLi sẽ chỉ hoạt động với cơ sở dữ liệu MySQL.

Vì vậy, nếu bạn phải chuyển dự án của mình sang sử dụng cơ sở dữ liệu khác, PDO sẽ giúp quá trình này trở nên dễ dàng. Bạn chỉ phải thay đổi chuỗi kết nối và một vài truy vấn. Với MySQLi, bạn sẽ cần viết lại toàn bộ mã - bao gồm các truy vấn.

Cả hai đều hướng đối tượng, nhưng MySQLi cũng cung cấp API thủ tục.

Cả hai đều hỗ trợ Prepared Statements. Prepared Statements bảo vệ khỏi SQL injection và rất quan trọng đối với bảo mật ứng dụng web.

Cài đặt MySQLi

Đối với Linux và Windows: Phần mở rộng MySQLi được cài đặt tự động trong hầu hết các trường hợp, khi gói php5 mysql được cài đặt.

Để biết chi tiết cài đặt, hãy truy cập: http://php.net/manual/en/mysqli.installation.php

Cài đặt PDO

Để biết chi tiết cài đặt, hãy truy cập: http://php.net/manual/en/pdo.installation.php

Mở một kết nối với MySQL

Trước khi chúng tôi có thể truy cập dữ liệu trong cơ sở dữ liệu MySQL, chúng tôi cần có khả năng kết nối với máy chủ:

<?php
$servername = "localhost";
$username = "username";
$password = "password";

// Create connection
$conn = new mysqli($servername, $username, $password);

// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
?>
MySQLi hướng đối tượng
<?php
$servername = "localhost";
$username = "username";
$password = "password";

// Create connection
$conn = mysqli_connect($servername, $username, $password);

// Check connection
if (!$conn) {
  die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?>
MySQLi thủ tục
<?php
$servername = "localhost";
$username = "username";
$password = "password";

try {
  $conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
  // set the PDO error mode to exception
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  echo "Connected successfully";
} catch(PDOException $e) {
  echo "Connection failed: " . $e->getMessage();
}
?>
PDO
Lưu ý: Trong ví dụ PDO ở trên, chúng tôi đã chỉ định tên cơ sở dữ liệu là myDB. PDO yêu cầu cơ sở dữ liệu hợp lệ để kết nối. Nếu không có cơ sở dữ liệu được chỉ định, một ngoại lệ được đưa ra.
Tip: Một lợi ích lớn của PDO là nó có một 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 tôi. Nếu một ngoại lệ được ném trong khối try {}, tập lệnh dừng thực thi và nhảy vào khối catch() {} đầu tiên.

Đóng kết nối với MySQL

Kết nối sẽ được đóng tự động khi tập lệnh kết thúc. Để đóng kết nối trước hãy sử dụng` lệnh sau:

$conn->close();
MySQLi hướng đối tượng
mysqli_close($conn);
MySQLi thủ tục
$conn = null;
PDO

Tạo cơ sở dữ liệu MySQL

Một cơ sở dữ liệu có nhiều bảng. Bạn sẽ cần được cấp quyền CREATE đặc biệt để tạo hoặc xóa cơ sở dữ liệu MySQL.

Câu lệnh CREATE DATABASE được sử dụng để tạo cơ sở dữ liệu trong MySQL.

<?php
$servername = "localhost";
$username = "username";
$password = "password";

// Create connection
$conn = new mysqli($servername, $username, $password);
// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}

// Create database
$sql = "CREATE DATABASE myDB";
if ($conn->query($sql) === TRUE) {
  echo "Database created successfully";
} else {
  echo "Error creating database: " . $conn->error;
}

$conn->close();
?>
MySQLi hướng đối tượng
Lưu ý: Khi bạn 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, password).
Tip: Nếu bạn phải sử dụng một cổng cụ thể, hãy thêm một chuỗi trống cho đối số tên cơ sở dữ liệu (database name), như sau: new mysqli("localhost", "username", "password", "", port)
<?php
$servername = "localhost";
$username = "username";
$password = "password";

// Create connection
$conn = mysqli_connect($servername, $username, $password);
// Check connection
if (!$conn) {
  die("Connection failed: " . mysqli_connect_error());
}

// Create database
$sql = "CREATE DATABASE myDB";
if (mysqli_query($conn, $sql)) {
  echo "Database created successfully";
} else {
  echo "Error creating database: " . mysqli_error($conn);
}

mysqli_close($conn);
?>
MySQLi thủ tục
<?php
$servername = "localhost";
$username = "username";
$password = "password";

try {
  $conn = new PDO("mysql:host=$servername", $username, $password);
  // set the PDO error mode to exception
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  $sql = "CREATE DATABASE myDB";
  // use exec() because no results are returned
  $conn->exec($sql);
  echo "Database created successfully<br>";
} catch(PDOException $e) {
  echo $sql . "<br>" . $e->getMessage();
}

$conn = null;
?>
PDO

Tạo bảng MySQL

Một bảng cơ sở dữ liệu có tên duy nhất và các cột. Câu lệnh CREATE TABLE được sử dụng để tạo bảng trong MySQL.

Chúng tôi sẽ tạo một bảng có tên "MyGuests", với năm cột: "id", "firstname", "lastname", "email" và "reg_date" như sau:

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
)

Kiểu dữ liệu xác định loại dữ liệu mà cột có thể lưu trữ. Sau kiểu dữ liệu, bạn có thể chỉ định các thuộc tính tùy chọn khác cho mỗi cột:

  • NOT NULL - Không cho phép truyền giá trị NULL cho cột này.
  • DEFAULT VALUE - Sử dụng giá trị mặc định khi không có giá trị nào khác được truyền vào cho cột.
  • UNSIGNED - Bắt buộc các số truyền vào cho cột phải lớn hơn hoặc bằng 0.
  • AUTO INCREMENT - MySQL tự động tăng giá trị của trường thêm 1 mỗi lần thêm bản ghi mới.
  • PRIMARY KEY - Cột là khóa chính.

Mỗi bảng nên 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.

Các ví dụ sau đây minh họa cách tạo bảng trong PHP:

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// sql to create table
$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
)";

if ($conn->query($sql) === TRUE) {
    echo "Table MyGuests created successfully";
} else {
    echo "Error creating table: " . $conn->error;
}

$conn->close();
?>
MySQLi hướng đối tượng
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

// sql to create table
$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
)";

if (mysqli_query($conn, $sql)) {
    echo "Table MyGuests created successfully";
} else {
    echo "Error creating table: " . mysqli_error($conn);
}

mysqli_close($conn);
?>
MySQLi thủ tục
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // sql to create table
    $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
    )";

    // use exec() because no results are returned
    $conn->exec($sql);
    echo "Table MyGuests created successfully";
}
catch(PDOException $e) {
    echo $sql . "<br>" . $e->getMessage();
}

$conn = null;
?>
PDO
Lập Trình PHP
Bài Viết Liên Quan:
Hướng dẫn lập trình PHP toàn tập
Trung Nguyen 08/05/2020
Hướng dẫn lập trình PHP toàn tập

Hướng dẫn lập trình PHP toàn tập sẽ giúp bạn từng bước tìm hiểu và nắm vững ngôn ngữ lập trình PHP.

Truy xuất dữ liệu MySQL trong PHP
Trung Nguyen 07/05/2020
Truy xuất dữ liệu MySQL trong PHP

Hướng dẫn cách truy xuất, lọc, sắp xếp dữ liệu MySQL trong PHP sử dụng MySQLi và PDO.

MySQL prepared statements trong PHP
Trung Nguyen 07/05/2020
MySQL prepared statements trong PHP

MySQL prepared statements trong PHP rất hữu ích để chống lại các cuộc tấn công SQL Injection.

Thêm dữ liệu vào MySQL trong PHP
Trung Nguyen 07/05/2020
Thêm dữ liệu vào MySQL trong PHP

Hướng dẫn này sẽ giúp bạn tìm hiểu cách thêm dữ liệu vào MySQL sử dụng MySQLi và PDO trong PHP.