Rate this post

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

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Contact Me on Zalo
Call now