Trong bài này, chúng ta sẽ tìm hiểu về select dữ liệu trong MySQL với PHP. Để học tốt bài này, các bạn cần đọc lại bài Cài đặt môi trường lập trình Web PHP với XAMPP để biết cách chạy ứng dụng web PHP với XAMPP.
Các ví dụ select dữ liệu sẽ thực hiện trên table gochocit_posts trong database gochocit. Database và table này đã được tạo trong bài Tạo database và tạo table trong MySQL với PHP. Các bạn cần đọc lại để xem cấu trúc của database và table trên.
Chúng ta có thể select một hoặc nhiều cột trong table. Cú pháp:
SELECT column_name(s) FROM table_name
Nếu muốn select tất cả cột trong table thì sử dụng ký tự *. Cú pháp:
SELECT * FROM table_name
1. Truy vấn (select) table sử dụng MySQLi (object-oriented)
Câu lệnh SELECT FROM được thực thi khi đối tượng mysqli là $conn gọi hàm query()
.
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "gochocit";
// create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT post_author, post_title, post_content FROM gochocit_posts";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo "Author: " . $row["post_author"]. " - Title: " . $row["post_title"]. " - " . $row["post_content"]. "<br>";
}
} else {
echo "0 results";
}
$conn->close();
?>
Thuộc tính num_rows
lưu trữ số dòng (row) select được. Hàm fetch_assoc()
trả về mảng kết hợp (associative array) của những dòng select được. Vòng lặp while được sử dụng để duyệt qua từng dòng của kết quả select được.
2. Truy vấn (select) table sử dụng MySQLi (procedural)
Câu lệnh SELECT FROM được thực thi khi gọi hàm mysqli_query()
.
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "gochocit";
// create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// check connection
if (!$conn) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT post_author, post_title, post_content FROM gochocit_posts";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
// output data of each row
while($row = mysqli_fetch_assoc($result)) {
echo "Author: " . $row["post_author"]. " - Title: " . $row["post_title"]. " - " . $row["post_content"]. "<br>";
}
} else {
echo "0 results";
}
mysqli_close($conn);
?>
Hàm mysqli_num_rows()
giúp lấy ra số dòng (row) select được. Hàm mysqli_fetch_assoc()
trả về mảng kết hợp (associative array) của những dòng select được. Vòng lặp while được sử dụng để duyệt qua từng dòng của kết quả select được.
3. Truy vấn (select) table sử dụng PDO (PHP Data Objects)
Câu lệnh SELECT FROM được thực thi khi đối tượng PDO là $conn gọi hàm prepare()
rồi thực thi select với hàm execute()
.
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "gochocit";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT post_author, post_title, post_content FROM gochocit_posts");
$stmt->execute();
// set the resulting array to associative
$stmt->setFetchMode(PDO::FETCH_ASSOC);
$result = $stmt->fetchAll();
foreach($result as $row) {
echo "Author: " . $row["post_author"]. " - Title: " . $row["post_title"]. " - " . $row["post_content"]. "<br>";
}
} catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
$conn = null;
?>
Sử dụng hàm setFetchMode()
với đối số PDO::FETCH_ASSOC
để thiết lập kết quả trả về là mảng kết hợp (associative array) của những dòng select được. Hàm fetchAll()
trả về tất cả những dòng select được. Vòng lặp foreach được sử dụng để duyệt qua từng dòng của kết quả select được.
4. Truy vấn (select) table với câu lệnh where
Chúng ta có thể sử dụng câu lệnh WHERE với SELECT để lấy ra những dòng (row) thỏa mãn một điều kiện nào đó. Ví dụ:
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "gochocit";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT * FROM gochocit_posts WHERE ID='3'");
$stmt->execute();
// set the resulting array to associative
$stmt->setFetchMode(PDO::FETCH_ASSOC);
$result = $stmt->fetchAll();
foreach($result as $row) {
echo "Author: " . $row["post_author"]. " - Title: " . $row["post_title"]. " - " . $row["post_content"]. "<br>";
}
} catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
$conn = null;
?>
Trong ví dụ trên, chúng ta chỉ lấy ra dòng dữ liệu nào có ID=3. Các bạn có thể đọc bài Sử dụng mệnh đề WHERE trong MySQL với Python để xem thêm một số cách sử dụng WHERE với SELECT.