PHP là một trong những ngôn ngữ lập trình phổ biến nhất cho phát triển web, đặc biệt là khi làm việc với cơ sở dữ liệu. Một trong những phần quan trọng của PHP là khả năng kết nối và thao tác với cơ sở dữ liệu MySQL. Thư viện mysqli (MySQL Improved) được phát triển để cung cấp các tính năng nâng cao và bảo mật hơn so với thư viện mysql cũ. Trong bài viết này, chúng ta sẽ tìm hiểu về hàm mysqli_query
và cách sử dụng nó để thực hiện các truy vấn cơ sở dữ liệu trong PHP.
Tổng quan về mysqli và mysqli_query
Thư viện mysqli (MySQL Improved) là một phần mở rộng của PHP, cung cấp giao diện hướng đối tượng và thủ tục để làm việc với cơ sở dữ liệu MySQL. Nó bao gồm nhiều tính năng mới như hỗ trợ chuẩn bị truy vấn (prepared statements), bảo mật tốt hơn và hiệu năng cải thiện so với thư viện mysql cũ.
Hàm mysqli_query
là một phần của thư viện mysqli, được sử dụng để gửi truy vấn SQL đến cơ sở dữ liệu MySQL. Hàm này trả về một đối tượng kết quả khi truy vấn thành công hoặc false
nếu có lỗi xảy ra.
Kết nối đến cơ sở dữ liệu bằng mysqli
Trước khi có thể thực hiện bất kỳ truy vấn nào, chúng ta cần thiết lập kết nối đến cơ sở dữ liệu MySQL.
<?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "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"; ?>
Trong đoạn mã trên, chúng ta sử dụng mysqli_connect
để tạo kết nối đến cơ sở dữ liệu. Nếu kết nối thất bại, một thông báo lỗi sẽ được hiển thị.
Sử dụng mysqli_query để thực hiện truy vấn
Hàm mysqli_query
được sử dụng để gửi truy vấn SQL đến cơ sở dữ liệu. Dưới đây là một ví dụ về cách thực hiện truy vấn SELECT:
<?php $sql = "SELECT id, firstname, lastname FROM MyGuests"; $result = $conn->query($sql); if ($result->num_rows > 0) { // Đầu ra dữ liệu của mỗi hàng while($row = $result->fetch_assoc()) { echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>"; } } else { echo "0 kết quả"; } $conn->close(); ?>
Trong ví dụ này, chúng ta sử dụng mysqli_query
để thực hiện truy vấn SELECT. Kết quả truy vấn được lưu trữ trong biến $result
. Chúng ta sử dụng vòng lặp while
và hàm fetch_assoc
để lấy từng hàng dữ liệu và hiển thị.
Thực hiện các truy vấn khác với mysqli_query
Ngoài truy vấn SELECT, chúng ta cũng có thể sử dụng mysqli_query
để thực hiện các truy vấn INSERT, UPDATE và DELETE. Dưới đây là các ví dụ:
Truy vấn INSERT
<?php $sql = "INSERT INTO MyGuests (firstname, lastname, email) VALUES ('John', 'Doe', 'john@example.com')"; if ($conn->query($sql) === TRUE) { echo "Bản ghi mới được tạo thành công"; } else { echo "Lỗi: " . $sql . "<br>" . $conn->error; } ?>
Truy vấn UPDATE
<?php $sql = "UPDATE MyGuests SET lastname='Doe' WHERE id=2"; if ($conn->query($sql) === TRUE) { echo "Bản ghi cập nhật thành công"; } else { echo "Lỗi: " . $sql . "<br>" . $conn->error; } ?>
Truy vấn DELETE
<?php $sql = "DELETE FROM MyGuests WHERE id=3"; if ($conn->query($sql) === TRUE) { echo "Bản ghi xóa thành công"; } else { echo "Lỗi: " . $sql . "<br>" . $conn->error; } ?>
Bảo mật trong khi sử dụng mysqli_query
Bảo mật là một yếu tố quan trọng khi làm việc với cơ sở dữ liệu, đặc biệt là để tránh SQL Injection. Để làm điều này, chúng ta nên sử dụng chuẩn bị truy vấn (prepared statements). Dưới đây là ví dụ:
<?php $stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)"); $stmt->bind_param("sss", $firstname, $lastname, $email); // Thiết lập các biến và thực thi $firstname = "John"; $lastname = "Doe"; $email = "john@example.com"; $stmt->execute(); echo "Bản ghi mới được tạo thành công"; $stmt->close(); ?>
Trong ví dụ này, chúng ta sử dụng prepare
để tạo một truy vấn chuẩn bị và bind_param
để gán giá trị cho các tham số. Điều này giúp tránh SQL Injection và bảo mật hơn.
Các lỗi thường gặp và cách khắc phục
Một số lỗi phổ biến khi sử dụng mysqli_query
bao gồm:
- Kết nối đến cơ sở dữ liệu thất bại.
- Truy vấn SQL sai cú pháp.
- Lỗi quyền truy cập cơ sở dữ liệu.
Cách khắc phục:
- Kiểm tra kết nối đến cơ sở dữ liệu bằng cách kiểm tra thông tin kết nối và xử lý lỗi.
- Kiểm tra cú pháp SQL và đảm bảo truy vấn đúng.
- Đảm bảo tài khoản sử dụng có đủ quyền truy cập vào cơ sở dữ liệu.
<?php // Kiểm tra kết nối if ($conn->connect_error) { die("Kết nối thất bại: " . $conn->connect_error); } // Thực hiện truy vấn và kiểm tra lỗi $sql = "SELECT id, firstname, lastname FROM MyGuests"; $result = $conn->query($sql); if (!$result) { die("Lỗi truy vấn: " . $conn->error); } ?>
Kết luận
Trong bài viết này, chúng ta đã tìm hiểu về hàm mysqli_query
trong PHP và cách sử dụng nó để thực hiện các truy vấn cơ sở dữ liệu MySQL. Từ việc kết nối đến cơ sở dữ liệu, thực hiện các truy vấn SELECT, INSERT, UPDATE, DELETE, đến việc bảo mật và xử lý lỗi, mysqli_query
cung cấp nhiều tính năng mạnh mẽ và linh hoạt. Để nắm vững hơn, bạn nên thực hành và tìm hiểu sâu thêm về PHP và MySQL.
Tài liệu tham khảo