Bài 08: Select dữ liệu MySQL và PHP

PHP & MySQL 17/03/2017 07:00 975
Trong bài viết này mình sẽ giới thiệu tới các bạn sử dụng câu lệnh SELECT để lấy về dữ liệu trong CSDL MySQL bằng PHP.

Câu lệnh SELECT được sử dụng để lấy dữ liệu từ một hay nhiều bảng trong CSDL.

SELECT column_name(s) FROM table_name

Hoặc bạn có thể sử dụng ký tự * để lấy tất cả các cột trong bảng.

SELECT * FROM table_name

Ví dụ sau chọn các cột id, title, slug, intro từ bảng News và hiển thị nó trên trang:

Sử dụng MySQLi Object-oriented

$host = "localhost";
$username = "root";
$password = "";
$dbName = "MySQLDemo";

// Tạo kết nối
$dbconn = new mysqli($host, $username, $password, $dbName);

// Kiểm tra kết nối
if ($dbconn->connect_error) {
    die("Kết nối thất bại: " . $dbconn->connect_error);
} 

// Câu lệnh truy vấn
$sql = "SELECT id, title,slug,intro FROM News";

// Thực thi câu truy vấn và gán kết quả và biến $result
$result = $dbconn->query($sql);

// Kiểm tra số lượng record trả về có lơn hơn 0
// Nếu lớn hơn tức là có kết quả, ngược lại sẽ không có kết quả
if ($result->num_rows > 0) {
   // Sử dụng vòng lặp while để lặp kết quả
    while($row = $result->fetch_assoc()) {
        echo "id: " . $row["id"]. " - Title: " . $row["title"]. " - Slug: ".$row['slug']." -  Intro:" . $row["intro"]. "<br>";
    }
} else {
     echo "Không có record nào";
}
// ngắt kết nối
$dbconn->close();

Đầu tiên, chúng ta thiết lập một truy vấn SQL chọn các cột id, title, slug và intro từ bảng News. Tiếp theo là mã chạy truy vấn và đặt kết quả vào một biến được gọi là $result.

Sau đó, chức năng num_rows() kiểm tra nếu có nhiều records hay không.

Nếu có nhiều records, hàm fetch_assoc() đặt tất cả các kết quả vào một mảng kết hợp mà chúng ta có thể lặp đi lặp lại. Vòng lặp while() sẽ lặp qua tập kết quả và xuất dữ liệu từ các cột id, title, slug và intro.

Sử dụng MySQLi Procedural.

$host = "localhost";
$username = "root";
$password = "";
$dbName = "MySQLDemo";

// Tạo kết nối
$dbconn = new mysqli_connect($host, $username, $password, $dbName);

// Kiểm tra kết nối
if (!$dbconn) {
    die("Kết nối thất bại: " . mysqli_connect_error());
} 

// Câu lệnh truy vấn
$sql = "SELECT id, title,slug,intro FROM News";

// Thực thi câu truy vấn và gán kết quả và biến $result
$result = mysqli_query($dbconn, $sql);

// Kiểm tra số lượng record trả về có lơn hơn 0
// Nếu lớn hơn tức là có kết quả, ngược lại sẽ không có kết quả
if (mysqli_num_rows($result) > 0){
   // Sử dụng vòng lặp while để lặp kết quả
    while($row = mysqli_fetch_assoc($result)) {
        echo "id: " . $row["id"]. " - Title: " . $row["title"]. " - Slug: ".$row['slug']." -  Intro:" . $row["intro"]. "<br>";
    }
} else {
     echo "Không có record nào";
}
// ngắt kết nối
mysqli_close($dbconn);

Sử dụng PDO

$host = "localhost";
$username = "root";
$password = "";
$dbName = "MySQLDemo";

try {
    // Kết nối CSDL
    $dbconn = new PDO("mysql:host=$host;dbname=$dbName", $username, $password);
     
    // Khai báo exception
    $dbconn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     
    // Sử đụng Prepare 
    $stmt = $dbconn->prepare("SELECT id, title, slug, intro FROM News"); 
     
    // Thực thi câu truy vấn
    $stmt->execute();
 
    // Khai báo fetch kiểu mảng kết hợp
    $stmt->setFetchMode(PDO::FETCH_ASSOC); 
     
    // Lấy danh sách kết quả
    $result = $stmt->fetchAll();
     
    // Lặp kết quả
    foreach ($result as $row){
        echo "id: " . $row["id"]. " - Title: " . $row["title"]. " - Slug: ".$row['slug']." -  Intro:" . $row["intro"]. "<br>";
    }
}
catch(PDOException $e) {
    echo "Lỗi: " . $e->getMessage();
}
 
// Ngắt kết nối
$dbconn = null;

Trong đoạn code trên mình đã sử dụng cơ chế Prepared mà chúng ta đã học ở bài trước đó.

Tổng kết.

Vậy là mình đã giới thiệu xong ba cách sử dụng câu lệnh SELECT để lấy dữ liệu của MySQL bằng PHP. Đây có thể nói là câu lệnh tổng quát nhất. Ngoài ra câu lệnh SELECT còn có thể kết hợp với các mệnh đề WHERE để lọc những kết quả mong muốn, LIMIT để giới hạn dữ liệu...vvv

Xem Thêm

Profile photo of adminTheHalfHeart

B.V.T

Sinh ra và lớn nên ở Bắc Giang. Hiện tại thì tôi đang là một lập trình viên tại VietISO. Tôi lập website này với mục đích là bookmark những gì tôi đã đọc qua và mong muốn chia sẻ những gì tôi biết.