Truy vấn SELECT trong MySQL bằng PHP
Trong hướng dẫn này, bạn sẽ học cách chọn bản ghi từ bảng MySQL bằng PHP.
Chọn dữ liệu từ bảng cơ sở dữ liệu
Cho đến nay bạn đã học cách tạo cơ sở dữ liệu và bảng cũng như chèn dữ liệu. Bây giờ đã đến lúc lấy dữ liệu những gì đã chèn trong hướng dẫn trước. Câu lệnh SQL SELECT
được sử dụng để chọn các bản ghi từ các bảng cơ sở dữ liệu. Cú pháp cơ bản của nó như sau:
Hãy tạo một truy vấn SQL bằng cách sử dụng câu lệnh SELECT
, sau đó chúng ta sẽ thực hiện truy vấn SQL này thông qua việc chuyển nó đến hàm mysqli_query()
để lấy dữ liệu bảng.
Hãy xem xét bảng cơ sở dữ liệu người của chúng tôi có các bản ghi sau:
Ví dụ
+ ---- + ------------ + ----------- + ------------------- --- +
| id | first_name | last_name | email |
+ ---- + ------------ + ----------- + ------------------- --- +
| 1 | Peter | Parker | peterparker@mail.com |
| 2 | John | Rambo | johnrambo@mail.com |
| 3 | Clark | Kent | clarkkent@mail.com |
| 4 | John | Carter | johncarter@mail.com |
| 5 | Harry | Potter | harrypotter@mail.com |
+ ---- + ------------ + ----------- + ------------------- --- +
Mã PHP trong ví dụ sau chọn tất cả dữ liệu được lưu trữ trong bảng persons (sử dụng ký tự dấu hoa thị (*
) thay cho tên cột sẽ chọn tất cả dữ liệu trong bảng).
Thủ tục
Ví dụ
<?php
/* Attempt MySQL server connection. Assuming you are running MySQL
server with default setting (user 'root' with no password) */
$link = mysqli_connect("localhost", "root", "", "demo");
// Check connection
if($link === false){
die("ERROR: Could not connect. " . mysqli_connect_error());
}
// Attempt select query execution
$sql = "SELECT * FROM persons";
if($result = mysqli_query($link, $sql)){
if(mysqli_num_rows($result) > 0){
echo "<table>";
echo "<tr>";
echo "<th>id</th>";
echo "<th>first_name</th>";
echo "<th>last_name</th>";
echo "<th>email</th>";
echo "</tr>";
while($row = mysqli_fetch_array($result)){
echo "<tr>";
echo "<td>" . $row['id'] . "</td>";
echo "<td>" . $row['first_name'] . "</td>";
echo "<td>" . $row['last_name'] . "</td>";
echo "<td>" . $row['email'] . "</td>";
echo "</tr>";
}
echo "</table>";
// Free result set
mysqli_free_result($result);
} else{
echo "No records matching your query were found.";
}
} else{
echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
}
// Close connection
mysqli_close($link);
?>
Hướng đối tượng
Ví dụ
<?php
/* Attempt MySQL server connection. Assuming you are running MySQL
server with default setting (user 'root' with no password) */
$mysqli = new mysqli("localhost", "root", "", "demo");
// Check connection
if($mysqli === false){
die("ERROR: Could not connect. " . $mysqli->connect_error);
}
// Attempt select query execution
$sql = "SELECT * FROM persons";
if($result = $mysqli->query($sql)){
if($result->num_rows > 0){
echo "<table>";
echo "<tr>";
echo "<th>id</th>";
echo "<th>first_name</th>";
echo "<th>last_name</th>";
echo "<th>email</th>";
echo "</tr>";
while($row = $result->fetch_array()){
echo "<tr>";
echo "<td>" . $row['id'] . "</td>";
echo "<td>" . $row['first_name'] . "</td>";
echo "<td>" . $row['last_name'] . "</td>";
echo "<td>" . $row['email'] . "</td>";
echo "</tr>";
}
echo "</table>";
// Free result set
$result->free();
} else{
echo "No records matching your query were found.";
}
} else{
echo "ERROR: Could not able to execute $sql. " . $mysqli->error;
}
// Close connection
$mysqli->close();
?>
PDO
Ví dụ
<?php
/* Attempt MySQL server connection. Assuming you are running MySQL
server with default setting (user 'root' with no password) */
try{
$pdo = new PDO("mysql:host=localhost;dbname=demo", "root", "");
// Set the PDO error mode to exception
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e){
die("ERROR: Could not connect. " . $e->getMessage());
}
// Attempt select query execution
try{
$sql = "SELECT * FROM persons";
$result = $pdo->query($sql);
if($result->rowCount() > 0){
echo "<table>";
echo "<tr>";
echo "<th>id</th>";
echo "<th>first_name</th>";
echo "<th>last_name</th>";
echo "<th>email</th>";
echo "</tr>";
while($row = $result->fetch()){
echo "<tr>";
echo "<td>" . $row['id'] . "</td>";
echo "<td>" . $row['first_name'] . "</td>";
echo "<td>" . $row['last_name'] . "</td>";
echo "<td>" . $row['email'] . "</td>";
echo "</tr>";
}
echo "</table>";
// Free result set
unset($result);
} else{
echo "No records matching your query were found.";
}
} catch(PDOException $e){
die("ERROR: Could not able to execute $sql. " . $e->getMessage());
}
// Close connection
unset($pdo);
?>
Giải thích mã (kiểu thủ tục)
Trong ví dụ trên, dữ liệu do hàm mysqli_query()
trả về được lưu trữ trong biến $result
. Mỗi lần hàm mysqli_fetch_array()
được gọi, nó trả về hàng tiếp theo từ tập hợp kết quả dưới dạng một mảng. Các vòng lặp while được sử dụng để vòng qua tất cả các hàng trong tập kết quả. Cuối cùng, giá trị của trường riêng lẻ có thể được truy cập từ hàng bằng cách chuyển chỉ mục trường hoặc tên trường vào biến $row
như $row['id']
hoặc $row[0]
, $row['first_name']
hoặc $row[1]
, $row['last_name']
hoặc $row[2]
và $row['email']
hoặc $row[3]
.
Nếu bạn muốn sử dụng vòng lặp for
, bạn có thể lấy giá trị bộ đếm vòng lặp hoặc số hàng được trả về bởi truy vấn bằng cách chuyển biến $result
cho hàm mysqli_num_rows()
. Giá trị bộ đếm vòng lặp này xác định số lần vòng lặp sẽ chạy.