Sử dụng SQL để truy vấn dữ liệu trong PHP

Cú pháp hàm mysql_query như sau:

mysql_query(câu lệnh sql).

VD: Để lấy tất cả các bản ghi trong bảng “Members”, ta sẽ gọi hàm mysql_query() như sau:

<?
mysql_query (“Select * from Members”)
?>

Vấn đề là khi thực hiện truy vấn này, dữ liệu sẽ được trả về dưới dạng một bảng. Ta sẽ tiến hành lấy từng dòng của bảng đó ra dưới dạng một mảng (sử dụng hàm mysql_fetch_array()), tiếp đó, việc xử lý các phần tử của mảng đó như thế nào là tùy ý các bạn.

Xem ví dụ sau:

<?php
$result = mysql_query(“SELECT id, name FROM mytable”);
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
printf (“ID: %s Name: %s”, $row[“name”]);
}

mysql_free_result($result);
?>

Đoạn lệnh trên lặp duyệt qua bảng kết quả result, đối với mỗi dòng của bảng, hàm mysql_fetch_array() sẽ đảm nhiệm việc tách dòng đó rồi đưa vào một mảng có tên là $row. Mỗi phần tử của mảng này sẽ là giá trị của cột có tên tương ứng.

Như vậy, trước khi xác định dữ liệu cần lấy là gì, chúng ta phải thiết kế câu truy vấn SQL sao cho hợp lý và đảm bảo rằng truy vấn đó chỉ lấy ra những thông tin gì cần sử dụng. Nếu lấy ra nhiều quá sẽ gây quá tải hệ thống dẫn đến treo máy.

Sau khi đã có được câu truy vấn SQL, ta chỉ việc kết hợp với hàm mysql_query() để trả kết quả về dưới dạng một biến nào đó.

Phần tiếp theo, chúng ta sẽ dùng một hàm có tên là mysql_fetch_array () để lấy từng dòng dữ liệu ra để xử lý.

Hàm mysql_fetch_array có hai tham số:
– Tham số đầu tiên xác định biến nắm giữ kết quả trả về bởi hàm mysql_query()
– Tham số thứ hai xác định kiểu định danh trường:
+ MYSQL_ASSOC: Đưa ra một mảng với chỉ số của mảng là tên trường
+ MYSQL_NUM: Đưa ra một mảng với chỉ số của mảng là số thứ tự của trường được liệt kê trong câu truy vấn SQL
+ MYSQL_BOTH: Đưa ra một mảng với chỉ số kết hợp giữa hai loại trên

Thông thường, ta dùng MYSQL_ASSOC để sử dụng chỉ số bằng tên các trường.

Khi truy vấn CSDL MySQL, ta có thể sử dụng thêm một số hàm phụ trợ:
mysql_num_rows(biến kết quả): trả về số các dòng lấy được từ biến kết quả.

VD:

<?php
$link = mysql_connect(“localhost”, “mysql_user”, “mysql_password”);
mysql_select_db(“database”, $link);
$result = mysql_query(“SELECT * FROM table1”, $link);
$num_rows = mysql_num_rows($result);
echo “Có $num_rows bản ghi được tìm thấy\n”;
?>

Tương tự ta có:
mysql_num_fields (biến kết quả): Trả về số trường (cột) trong tập kết quả

mysql_affected_rows (): Trả về số bản ghi bị ảnh hưởng bởi các câu lệnh SQL INSERT, UPDATE, DELETE.

Ví dụ:

<?php
mysql_pconnect(“localhost”, “mysql_user”, “mysql_password”) or
die (“Could not connect”);
mysql_query(“DELETE FROM mytable WHERE id < 10”);
printf (“Số bản ghi bị xóa: %d\n”, mysql_affected_rows());
?>

mysql_data_seek ( nguồn kết quả, dòng cần truy cập): Hàm này chuyển con trỏ dòng của nguồn kết quả đến một dòng nào đó. Dòng đầu tiên trong bảng kết quả được đánh số là 0, dòng cuối cùng chính là mysql_num_rows()-1. Hàm trả về TRUE nếu thành công, ngược lại là FALSE

Chú ý rằng hàm này chỉ sử dụng cùng với hàm mysql_query
Ví dụ:
<?php
$link = mysql_pconnect(“localhost”, “mysql_user”, “mysql_password”)
or die(“Could not connect”);

mysql_select_db(“samp_db”)
or exit(“Could not select database”);

$query = “SELECT last_name, first_name FROM friends”;
$result = mysql_query($query)
or die(“Query failed”);

/* fetch rows in reverse order */
for ($i = mysql_num_rows($result) – 1; $i >= 0; $i–) {
if (!mysql_data_seek($result, $i)) {
echo “Cannot seek to row $i\n”;
continue;
}

if(!($row = mysql_fetch_object($result)))
continue;

echo “$row->last_name $row->first_name<br />\n”;
}

mysql_free_result($result);
?>

sưu tầm

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

%d bloggers like this: