Cú pháp chung:
Câu lệnh SQL SELECT được sử dụng để nhận (fetch) dữ liệu từ một table, hoặc nhiều table liên kết, từ cơ sở dữ liệu MySQL . Ta có thể thực hiện lệnh này tại dấu nhắc mysql> hoặc trong các script PHP.
Cú pháp tổng quát nhất của lệnh SELECT:
SELECT field1, field2,...fieldN table_name1, table_name2...
[WHERE Clause] [LIMIT N]
Lưu ý:
Trên đây chỉ liệt các tham số cơ bản nhất của lệnh SELECT. Các tham số đặt trong cặp dấu ngoặc vuông ([, ]) là tùy chọn của lệnh.
Tác dụng của lệnh:
Nhận dữ liệu từ các field: field1, field2,… fieldN trong các table: table_name1, table_name2,… của cơ sở dữ liệu đang mở.
Lệnh chỉ cho nhận ra các record thỏa mãn mệnh đề logic ([Clause]) sau WHERE. Nếu cần nhận ra tất cả record thì không cần sử dụng tham số [WHERE].
Khi cần nhận dữ liệu từ tất cả field của table thì có thể dùng dấu * để thay thế cho các tên field.
Tham số [LIMIT <n>] được sử dụng khi cần lấy ra đủ n record thỏa mãn điều kiện đã chỉ ra.
1. Nhận dữ liệu từ dấu nhắc
Câu lệnh SELECT được sử dụng tại dấu nhắc mysql> như sau:
Ví dụ 1:
root@ubuntu# mysql -u root -p password;
Enter password:*******
mysql> use HSCB;
Database changed
mysql> SELECT * from lylich;
…
mysql>
Lệnh SELECT này nhận ra tất cả các record, đầy đủ các filed, từ table lylich của cơ sở dữ liệu HSSB.
Ví dụ 2:
root@ubuntu# mysql -u root -p password;
Enter password:*******
mysql> use HSCB;
Database changed
mysql> SELECT * from lylich WHERE NoiSinh = “Hội An”;
…
mysql>
Nếu chỉ muốn nhận ra các record mà có nơi sinh là “Hoi An” thì câu lệnh SELECT được viết như trên.
2. Nhận dữ liệu từ script PHP
Trong trường hợp này ta cần phải sử dụng kết hợp cả hai hàm PHP: mysql_query() và mysql_fetch_array().
Hàm mysql_query() được sử dụng để thực hiện câu lệnh SQL SELECT để nhận dữ liệu mà ta cần.
Hàm mysql_fetch_array(), được sử dụng ngay sau đó, để nhận tất cả các record mà hàm mysql_query() trả về.
Cú pháp hàm mysql_fetch_array():
mysql_fetch_array(<result>, [result_type]);
- Result: Tập kết quả, các record, được trả về bởi một trong các hàm mysql_query(), mysql_store_result() or mysql_use_result()
- Result_type: Chỉ ra loại mảng kết quả: MYSQL_ASSOC (mảng kết hợp); MYSQL_NUM (mảng số); MYSQL_BOTH (tự do). Mỗi loại có một cách truy xuất khác nhau đến các phần tử của nó.
Ví dụ:
$sql = "SELECT Lastname,Age FROM Persons ORDER BY Lastname";
$result = mysql_query($con, $sql)
// Mảng số: Dùng chỉ số để truy xuất đến giá trị của các field của record nhận được.
$row = mysql_fetch_array($result, MYSQL_NUM);
printf ("%s (%s)\n", $row[0], $row[1]);
// Mảng kết hợp: Dùng tên field để truy xuất đến giá trị của các field của record nhận được.
$row = mysql_fetch_array($result, MYSQL_ASSOC);
printf ("%s (%s)\n", $row["Lastname"], $row["Age"]);
// Mảng tự do: Có thể dùng chỉ số học tên field.
$row = mysql_fetch_array($result, MYSQL_BOTH);
printf ("%s (%s)\n", $row[0], $row[1]);
hoặc
printf ("%s (%s)\n", $row["Lastname"], $row["Age"]);
hoặc
mysql_free_result($result);
-----------------------------------
Hàm này nhận một record như là một mảng (cụ thể: nếu nhận được một record thì hàm trả về một mảng một chiều, với số phần tử bằng số field của record nhận được). Có thể là mảng kết hợp hoặc mảng số hoặc mảng tự do. Nếu không nhận được bất kỳ record nào nó sẽ về giá trị Fales (ngược lại là True).
Ví dụ 2:
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = 'a123456789z';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
If (! $conn)
{
die('Could not connect: ' . mysql_error());
}
//--------------------------------------------------
$sql = 'SELECT tutorial_id, tutorial_title,
tutorial_author, submission_date FROM tutorials_tbl';
mysql_select_db('TUTORIALS');
$retval = mysql_query( $sql, $conn );
If (!$retval)
{
die('Could not get data: ' . mysql_error());
}
// Nhận và in từng record kết quả:
while($row = mysql_fetch_array($retval, MYSQL_ASSOC))
{
echo "Tutorial ID :{$row['tutorial_id']} <br> ".
"Title: {$row['tutorial_title']} <br> ".
"Author: {$row['tutorial_author']} <br> ".
"Submission Date : {$row['submission_date']} <br> ".
"--------------------------------<br>";
}
// Kết thúc việc nhận và in từng record kết quả
echo "Fetched data successfully\n";
mysql_close($conn);
?>
---------------------------
Từng record kết quả mà câu lệnh SQL SELRCT ($sql) nhận được sẽ được đưa vào biến mảng row (while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) để rồi sau đó in ra màn hình.
Mảng $row là mảng kết hợp ($row = mysql_fetch_array($retval, MYSQL_ASSOC)) nên ở đây sử dụng tên field để truy xuất đến các phần tử của nó. Trong trường hợp này phải sử dụng cặp dấu nháy đơn để bọc các tên field.
Có thể sử dụng hàm mysql_fetch_assoc() thay thế cho hàm mysql_fetch_array(result, mysql_asoc).
3. Giải phóng bộ nhớ
PHP cung cấp hàm mysql_free_result(result) để giải phóng vùng nhớ (memory) mà chương trình sử dụng để lưu tạm thời <result> trước đó, cụ thể ở đây là biến $retval mà hàm mysql_query($sql, $conn) sử dụng để lưu kết quả có được khi thực hiện câu lệnh truy vấn SELECT.
$retval = mysql_query( $sql, $conn );
….
mysql_free_result($retval);
Ví dụ 2:
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = 'a123456789z';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
If (!$conn)
{
die('Could not connect: ' . mysql_error());
}
//--------------------------------------------------
$sql = 'SELECT tutorial_id, tutorial_title,
tutorial_author, submission_date FROM tutorials_tbl';
mysql_select_db('TUTORIALS');
$retval = mysql_query( $sql, $conn );
If (!$retval)
{
die('Could not get data: ' . mysql_error());
}
//-----------------------------------------------------------------------
while($row = mysql_fetch_array($retval, MYSQL_NUM))
{
echo "Tutorial ID :{$row[0]} <br> ".
"Title: {$row[1]} <br> ".
"Author: {$row[2]} <br> ".
"Submission Date : {$row[3]} <br> ".
"--------------------------------<br>";
}
// Giải phóng bộ nhớ, đóng kết nối và kết thúc
mysql_free_result($retval);
echo "Fetched data successfully\n";
mysql_close($conn);
?>
------------------------------
Trong ví dụ này, hàm mysql_fetch_array() được sử dụng với tham số MYSQL_NUM nên kết quả nhận được là mảng số $row, do đó, ở đây phải sử dụng chỉ số để truy xuất đến các phần tử của mảng này.
(Nguyễn Kim Tuấn - K.CNTT)
» Tin mới nhất:
» Các tin khác: