Hướng dẫn kết nối MySQL với PHP chi tiết và đơn giản

Trong bài viết này, chúng ta sẽ tìm hiểu các cách kết nối MySQL với PHP, kèm theo ví dụ minh họa và hướng dẫn xử lý một số lỗi thường gặp.

 

1. Chuẩn bị môi trường PHP và MySQL

 

Trước khi kết nối, bạn cần chuẩn bị môi trường lập trình có hỗ trợ PHP và MySQL. Nếu đang sử dụng Windows, có thể cài đặt XAMPP để thiết lập máy chủ web và cơ sở dữ liệu trên máy tính cá nhân.

 

XAMPP cung cấp các thành phần cần thiết:

 

  • Apache: Máy chủ web dùng để chạy ứng dụng PHP.

 

  • PHP: Ngôn ngữ xử lý mã nguồn phía máy chủ.

 

  • MySQL/MariaDB: Hệ quản trị cơ sở dữ liệu.

 

  • phpMyAdmin: Công cụ quản lý cơ sở dữ liệu thông qua trình duyệt.

 

Sau khi cài đặt XAMPP, mở XAMPP Control Panel và khởi động Apache cùng MySQL.

 

Tiếp theo, truy cập địa chỉ sau để mở phpMyAdmin:

 

http://localhost/phpmyadmin

 

Tạo một cơ sở dữ liệu mới, ví dụ demo_php, để sử dụng trong quá trình thực hành.

 

2. Kết nối MySQL với PHP bằng MySQLi

 

MySQLi (MySQL Improved) là một phần mở rộng của PHP hỗ trợ kết nối và thao tác với cơ sở dữ liệu MySQL. Đây là phương pháp phổ biến, phù hợp với các dự án PHP sử dụng MySQL.

 

Bạn có thể kết nối theo kiểu hướng đối tượng hoặc lập trình thủ tục.

 

Cách 1: Sử dụng MySQLi hướng đối tượng

 

Tạo file connect.php và thêm đoạn mã sau:

 

<?php

$servername = "localhost";

$username = "root";

$password = "";

$dbname = "demo_php";

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {

    die("Kết nối thất bại: " . $conn->connect_error);

}

echo "Kết nối MySQL thành công!";

?>

Trong đoạn mã trên:

 

  • $servername: Địa chỉ máy chủ MySQL.

 

  • $username: Tên tài khoản đăng nhập MySQL.

 

  • $password: Mật khẩu tài khoản.

 

  • $dbname: Tên cơ sở dữ liệu cần kết nối.

 

  • $conn: Đối tượng kết nối được tạo từ lớp mysqli.

 

Nếu thông tin kết nối chính xác, trình duyệt sẽ hiển thị thông báo kết nối thành công.

 

Cách 2: Sử dụng MySQLi theo kiểu thủ tục

 

Ngoài hướng đối tượng, bạn có thể sử dụng cú pháp thủ tục như sau:

 

<?php

$servername = "localhost";

$username = "root";

$password = "";

$dbname = "demo_php";

$conn = mysqli_connect($servername, $username, $password, $dbname);

if (!$conn) {

    die("Kết nối thất bại: " . mysqli_connect_error());

}

echo "Kết nối MySQL thành công!";

?>

 

Hai cách trên đều có thể thực hiện các thao tác với cơ sở dữ liệu. Bạn nên lựa chọn một cách viết thống nhất trong cùng dự án để mã nguồn dễ quản lý.

 

3. Kết nối MySQL với PHP bằng PDO

 

PDO (PHP Data Objects) là một giao diện cho phép PHP làm việc với nhiều hệ quản trị cơ sở dữ liệu khác nhau. Ngoài MySQL, PDO còn hỗ trợ SQLite, PostgreSQL và một số hệ quản trị khác.

 

Ưu điểm của PDO là hỗ trợ Prepared Statements, giúp xử lý truy vấn có tham số an toàn và hạn chế nguy cơ SQL Injection.

 

Tạo file connect.php với nội dung:

 

<?php

$servername = "localhost";

$username = "root";

$password = "";

$dbname = "demo_php";

try {

    $conn = new PDO(

        "mysql:host=$servername;dbname=$dbname;charset=utf8mb4",

        $username,

        $password

    );

    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


    echo "Kết nối MySQL thành công!";

} catch (PDOException $e) {

    die("Kết nối thất bại: " . $e->getMessage());

}

?>

 

Trong đó:

 

  • PDO: Khởi tạo đối tượng kết nối cơ sở dữ liệu.

 

  • mysql:host: Khai báo máy chủ MySQL.

 

  • dbname: Xác định cơ sở dữ liệu cần sử dụng.

 

  • charset=utf8mb4: Thiết lập bộ mã ký tự hỗ trợ tiếng Việt và nhiều loại ký tự Unicode.

 

  • PDO::ATTR_ERRMODE: Cấu hình cách PDO xử lý lỗi.

 

Khi kết nối thành công, PHP sẽ hiển thị thông báo tương ứng. Nếu xảy ra lỗi, chương trình sẽ bắt ngoại lệ và hiển thị thông tin lỗi.

 

4. Thực hiện truy vấn dữ liệu sau khi kết nối

 

Sau khi kết nối thành công, bạn có thể thực hiện các thao tác thêm, sửa, xóa và truy vấn dữ liệu từ MySQL.

 

Ví dụ, tạo bảng users trong cơ sở dữ liệu demo_php bằng câu lệnh SQL:

 

CREATE TABLE users (

    id INT AUTO_INCREMENT PRIMARY KEY,

    name VARCHAR(100) NOT NULL,

    email VARCHAR(150) NOT NULL

);

 

Thêm dữ liệu vào MySQL bằng PHP

 

Sử dụng MySQLi hướng đối tượng:

 

<?php

require_once "connect.php";

$name = "Nguyen Van A";

$email = "[email protected]";

$stmt = $conn->prepare("INSERT INTO users (name, email) VALUES (?, ?)");

$stmt->bind_param("ss", $name, $email);

if ($stmt->execute()) {

    echo "Thêm dữ liệu thành công!";

} else {

    echo "Lỗi: " . $stmt->error;
}

$stmt->close();

$conn->close();

?>

 

Truy vấn và hiển thị dữ liệu

 

<?php

require_once "connect.php";

$sql = "SELECT id, name, email FROM users";

$result = $conn->query($sql);

if ($result->num_rows > 0) {

    while ($row = $result->fetch_assoc()) {

        echo "ID: " . $row["id"] . "<br>";

        echo "Tên: " . htmlspecialchars($row["name"]) . "<br>";

        echo "Email: " . htmlspecialchars($row["email"]) . "<br><br>";

    }

} else {

    echo "Không có dữ liệu!";

}

$conn->close();

?>

 

Trong ví dụ này, PHP sử dụng câu lệnh SELECT để lấy danh sách người dùng. Hàm fetch_assoc() trả về từng dòng dữ liệu dưới dạng mảng kết hợp để thuận tiện cho việc hiển thị.

 

Nếu sử dụng PDO, bạn có thể thực hiện truy vấn bằng prepare() và execute() tương tự.

 

5. Một số lỗi thường gặp khi kết nối MySQL với PHP

 

Trong quá trình thiết lập kết nối, bạn có thể gặp một số lỗi phổ biến sau:

 

Lỗi Access denied for user

 

Nguyên nhân thường do tên đăng nhập hoặc mật khẩu MySQL không chính xác, hoặc tài khoản chưa được cấp quyền truy cập cơ sở dữ liệu.

 

Cách khắc phục:

 

  • Kiểm tra lại username và password.

 

  • Xác nhận tài khoản có quyền truy cập cơ sở dữ liệu.

 

  • Kiểm tra thông tin tài khoản trong phpMyAdmin.

 

Lỗi Connection refused hoặc Can't connect to MySQL server

 

Lỗi này thường xuất hiện khi máy chủ MySQL chưa khởi động, sai địa chỉ kết nối hoặc sử dụng nhầm cổng.

 

Cách khắc phục:

 

  • Kiểm tra trạng thái MySQL trong XAMPP.

 

  • Xác nhận địa chỉ máy chủ là localhost hoặc 127.0.0.1.

 

  • Kiểm tra cổng MySQL đang sử dụng. Nếu MySQL chạy trên cổng khác mặc định, cần khai báo đúng cổng trong chuỗi kết nối.

 

Lỗi Unknown database

 

Nguyên nhân là tên cơ sở dữ liệu khai báo trong PHP không tồn tại hoặc bị nhập sai.

 

Cách khắc phục:

 

  • Truy cập phpMyAdmin.

 

  • Kiểm tra tên cơ sở dữ liệu.

 

  • Tạo cơ sở dữ liệu nếu chưa có.

 

  • Cập nhật lại biến $dbname trong file kết nối.

 

Lỗi Class PDO hoặc mysqli not found

 

Lỗi này có thể xảy ra khi phần mở rộng PDO MySQL hoặc MySQLi chưa được bật trong cấu hình PHP.

 

Cách khắc phục:

 

  • Mở file php.ini.

 

  • Tìm các dòng extension=mysqli và extension=pdo_mysql.

 

  • Bỏ dấu chấm phẩy ở đầu dòng nếu tiện ích đang bị tắt.

 

  • Khởi động lại Apache để áp dụng cấu hình.

 

6. Một số lưu ý khi kết nối MySQL với PHP

 

Để kết nối cơ sở dữ liệu ổn định và an toàn, bạn nên chú ý một số vấn đề sau:

 

  • Không sử dụng tài khoản root trong môi trường website thực tế. Nên tạo tài khoản riêng với quyền truy cập phù hợp.

 

  • Không lưu mật khẩu cơ sở dữ liệu trực tiếp trong mã nguồn công khai.

 

  • Sử dụng Prepared Statements khi truy vấn có dữ liệu đầu vào từ người dùng để hạn chế SQL Injection.

 

  • Thiết lập utf8mb4 để hỗ trợ tiếng Việt và các ký tự đặc biệt.

 

  • Đóng kết nối sau khi hoàn thành công việc nếu cần quản lý tài nguyên theo cách thủ công.

 

  • Không hiển thị thông tin lỗi kết nối chi tiết cho người dùng trên website thật. Nên ghi lỗi vào log để kiểm tra và xử lý.

 HỖ TRỢ TRỰC TUYẾN