PHP và MySQL là một cặp công nghệ phổ biến để xây dựng các ứng dụng web động. PHP là một ngôn ngữ kịch bản mạnh mẽ để phát triển web, trong khi MySQL là một hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) dùng để lưu trữ và quản lý dữ liệu. Khi kết hợp với nhau, chúng cho phép bạn xây dựng các ứng dụng web có thể tương tác với cơ sở dữ liệu một cách dễ dàng.
Trong bài viết này, chúng ta sẽ tìm hiểu cách kết nối PHP với MySQL, thực hiện các thao tác cơ bản như thêm, xóa, cập nhật và lấy dữ liệu từ cơ sở dữ liệu MySQL.
1. Kết nối PHP với MySQL
Để kết nối PHP với cơ sở dữ liệu MySQL, bạn có thể sử dụng hai cách chính:
mysqli: Hướng thủ tục (procedural) và hướng đối tượng (OOP).PDO(PHP Data Objects): Cung cấp giao diện hướng đối tượng thống nhất cho nhiều hệ quản trị cơ sở dữ liệu, bao gồm MySQL.
Kết nối MySQL bằng mysqli
Cách kết nối bằng hướng đối tượng:
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "my_database";
// 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);
}
echo "Kết nối thành công!";Cách kết nối bằng hướng thủ tục:
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "my_database";
// Tạo 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());
}
echo "Kết nối thành công!";Kết nối MySQL bằng PDO
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "my_database";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// Cài đặt chế độ lỗi PDO
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Kết nối thành công!";
} catch(PDOException $e) {
echo "Kết nối thất bại: " . $e->getMessage();
}So sánh mysqli và PDO:
- Mysqli chỉ hỗ trợ MySQL, trong khi PDO hỗ trợ nhiều hệ quản trị cơ sở dữ liệu khác như PostgreSQL, SQLite, v.v.
- Cả hai đều hỗ trợ các thao tác chuẩn như thêm, sửa, xóa, và lấy dữ liệu. PDO có ưu điểm là dễ di chuyển mã qua lại giữa các hệ quản trị cơ sở dữ liệu khác nhau hơn.
2. Thực hiện truy vấn MySQL với PHP
Sau khi kết nối với cơ sở dữ liệu, bạn có thể thực hiện các truy vấn SQL như INSERT, SELECT, UPDATE, và DELETE để quản lý dữ liệu.
2.1. Thêm dữ liệu (INSERT)
Sử dụng mysqli (hướng đối tượng):
$sql = "INSERT INTO users (username, email) VALUES ('john_doe', 'john@example.com')";
if ($conn->query($sql) === TRUE) {
echo "Thêm dữ liệu thành công!";
} else {
echo "Lỗi: " . $sql . "<br>" . $conn->error;
}Sử dụng PDO:
try {
$sql = "INSERT INTO users (username, email) VALUES ('jane_doe', 'jane@example.com')";
$conn->exec($sql);
echo "Thêm dữ liệu thành công!";
} catch(PDOException $e) {
echo "Lỗi: " . $e->getMessage();
}2.2. Lấy dữ liệu (SELECT)
Sử dụng mysqli (hướng đối tượng):
$sql = "SELECT id, username, email FROM users";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "ID: " . $row["id"]. " - Username: " . $row["username"]. " - Email: " . $row["email"]. "<br>";
}
} else {
echo "Không có kết quả";
}Sử dụng PDO:
$sql = "SELECT id, username, email FROM users";
$stmt = $conn->query($sql);
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo "ID: " . $row["id"]. " - Username: " . $row["username"]. " - Email: " . $row["email"]. "<br>";
}2.3. Cập nhật dữ liệu (UPDATE)
Sử dụng mysqli (hướng đối tượng):
$sql = "UPDATE users SET email='new_email@example.com' WHERE id=1";
if ($conn->query($sql) === TRUE) {
echo "Cập nhật thành công!";
} else {
echo "Lỗi cập nhật: " . $conn->error;
}Sử dụng PDO:
$sql = "UPDATE users SET email='new_email@example.com' WHERE id=1";
try {
$stmt = $conn->prepare($sql);
$stmt->execute();
echo "Cập nhật thành công!";
} catch(PDOException $e) {
echo "Lỗi cập nhật: " . $e->getMessage();
}2.4. Xóa dữ liệu (DELETE)
Sử dụng mysqli (hướng đối tượng):
$sql = "DELETE FROM users WHERE id=1";
if ($conn->query($sql) === TRUE) {
echo "Xóa dữ liệu thành công!";
} else {
echo "Lỗi xóa: " . $conn->error;
}Sử dụng PDO:
$sql = "DELETE FROM users WHERE id=1";
try {
$stmt = $conn->prepare($sql);
$stmt->execute();
echo "Xóa dữ liệu thành công!";
} catch(PDOException $e) {
echo "Lỗi xóa: " . $e->getMessage();
}3. Bảo mật với Prepared Statements
Sử dụng các truy vấn SQL trực tiếp có thể dẫn đến SQL Injection nếu không có biện pháp bảo vệ. Để ngăn chặn điều này, PHP cung cấp Prepared Statements để bảo vệ dữ liệu người dùng khi truy vấn cơ sở dữ liệu.
Prepared Statements với mysqli:
$stmt = $conn->prepare("INSERT INTO users (username, email) VALUES (?, ?)");
$stmt->bind_param("ss", $username, $email);
$username = "alice";
$email = "alice@example.com";
$stmt->execute();
$stmt->close();Prepared Statements với PDO:
$stmt = $conn->prepare("INSERT INTO users (username, email) VALUES (:username, :email)");
$stmt->bindParam(':username', $username);
$stmt->bindParam(':email', $email);
$username = "bob";
$email = "bob@example.com";
$stmt->execute();Prepared Statements bảo vệ dữ liệu bằng cách không trực tiếp chèn dữ liệu vào chuỗi SQL, giúp ngăn chặn tấn công SQL Injection.
4. Đóng kết nối
Sau khi hoàn tất việc truy vấn, bạn nên đóng kết nối với cơ sở dữ liệu để giải phóng tài nguyên.
Đóng kết nối mysqli:
$conn->close();Đóng kết nối PDO:
$conn = null;5. Xử lý lỗi kết nối và truy vấn
Khi làm việc với cơ sở dữ liệu, luôn luôn xử lý lỗi kết nối và lỗi truy vấn để đảm bảo ứng dụng hoạt động mượt mà. Trong mysqli, bạn có thể kiểm tra lỗi bằng cách sử dụng phương thức connect_error hoặc thuộc tính error. Trong PDO, sử dụng try-catch để bắt các ngoại lệ (PDOException).
Ví dụ xử lý lỗi:
// Xử lý lỗi với mysqli
if ($conn->connect_error) {
die("Kết nối thất bại: " . $conn->connect_error);
}
// Xử lý lỗi với PDO
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo "Kết nối thất bại: " . $e->getMessage();
}6. Kết luận
Kết hợp PHP và MySQL là cách phổ biến để xây dựng các ứng dụng web động có khả năng lưu trữ và xử lý dữ liệu mạnh mẽ. Bằng cách sử dụng các phương pháp kết nối với MySQL như mysqli hoặc PDO, bạn có thể truy vấn cơ sở dữ liệu, thêm, sửa, xóa dữ liệu và lấy dữ liệu một cách dễ dàng. Ngoài ra, luôn sử dụng Prepared Statements để bảo vệ ứng dụng của bạn khỏi các cuộc tấn công SQL Injection.
Việc làm chủ PHP và MySQL là nền tảng để xây dựng các ứng dụng web có quy mô từ nhỏ đến lớn. Hãy tiếp tục thực hành và khám phá thêm các khái niệm nâng cao để cải thiện kỹ năng lập trình PHP của bạn!









