Dữ liệu có thể được tìm nạp từ các bảng MySQL bằng cách thực thi câu lệnh SQL SELECT thông qua hàm mysql_query của PHP. Bạn có một số tùy chọn để lấy dữ liệu từ MySQL
Tùy chọn được sử dụng thường xuyên nhất là sử dụng hàm mysql_fetch_array[]. Hàm này trả về hàng dưới dạng một mảng kết hợp, một mảng số hoặc cả hai. Hàm này trả về FALSE nếu không còn hàng nào
Dưới đây là một ví dụ đơn giản để tìm nạp các bản ghi từ bảng nhân viên
Thí dụ
Hãy thử ví dụ sau để hiển thị tất cả các bản ghi từ bảng nhân viên
". "EMP NAME : {$row['emp_name']}
". "EMP SALARY : {$row['emp_salary']}
". "--------------------------------
"; } echo "Fetched data successfully\n"; mysql_close[$conn]; ?>
Nội dung của các hàng được gán cho biến $row và các giá trị trong hàng sau đó được in ra
LƯU Ý – Luôn nhớ đặt dấu ngoặc nhọn khi bạn muốn chèn trực tiếp giá trị mảng vào chuỗi
Trong ví dụ trên, hằng số MYSQL_ASSOC được sử dụng làm đối số thứ hai cho mysql_fetch_array[], để nó trả về hàng dưới dạng một mảng kết hợp. Với một mảng kết hợp, bạn có thể truy cập trường bằng cách sử dụng tên của chúng thay vì sử dụng chỉ mục
PHP cung cấp một hàm khác gọi là mysql_fetch_assoc[] cũng trả về hàng dưới dạng một mảng kết hợp
Thí dụ
Hãy thử ví dụ sau để hiển thị tất cả các bản ghi từ bảng nhân viên bằng hàm mysql_fetch_assoc[]
". "EMP NAME : {$row['emp_name']}
". "EMP SALARY : {$row['emp_salary']}
". "--------------------------------
"; } echo "Fetched data successfully\n"; mysql_close[$conn]; ?>
Bạn cũng có thể sử dụng hằng số MYSQL_NUM, làm đối số thứ hai cho mysql_fetch_array[]. Điều này sẽ khiến hàm trả về một mảng có chỉ số là số
Thí dụ
Hãy thử ví dụ sau để hiển thị tất cả các bản ghi từ bảng employee sử dụng đối số MYSQL_NUM
". "EMP NAME : {$row[1]}
". "EMP SALARY : {$row[2]}
". "--------------------------------
"; } echo "Fetched data successfully\n"; mysql_close[$conn]; ?>
Tất cả ba ví dụ trên sẽ tạo ra cùng một kết quả
Giải phóng bộ nhớ
Một cách thực hành tốt là giải phóng bộ nhớ con trỏ ở cuối mỗi câu lệnh CHỌN. Điều này có thể được thực hiện bằng cách sử dụng hàm mysql_free_result[] trong PHP. Dưới đây là ví dụ để cho thấy nó phải được sử dụng như thế nào
Thí dụ
Hãy thử ví dụ sau
". "EMP NAME : {$row[1]}
". "EMP SALARY : {$row[2]}
". "--------------------------------
"; } mysql_free_result[$retval]; echo "Fetched data successfully\n"; mysql_close[$conn]; ?>
Trong khi tìm nạp dữ liệu, bạn có thể viết SQL phức tạp như bạn muốn. Thủ tục sẽ vẫn giống như đã đề cập ở trên
Trong chương trước, chúng ta đã thiết lập kết nối đến cơ sở dữ liệu MySQL của bạn, vì vậy bây giờ là lúc để làm điều gì đó thú vị với kết nối. Như đã đề cập trong phần giới thiệu, chúng tôi tương tác với máy chủ MySQL bằng cách gửi mã SQL thông qua hàm PHP, cụ thể hơn là hàm mysql_query[]
Để truy xuất dữ liệu thông qua SQL, câu lệnh SELECT được sử dụng. Nó có nhiều biến thể, nhưng ở dạng đơn giản nhất, nó thường trông như thế này
CHỌN tên_cột TỪ_tên_bảng
Truy vấn này sẽ chọn dữ liệu từ cột có tên "column_name" trong bảng có tên "table_name" và trả về tất cả các hàng của nó. Trong chương giới thiệu, chúng tôi đã chèn một số hàng dữ liệu vào bảng test_users, nơi chúng tôi có các cột id, tên và quốc gia. Để có được dữ liệu này, truy vấn của chúng tôi có thể trông như thế này
CHỌN id, tên, quốc gia TỪ test_users
Đó là SQL cần thiết để truy xuất dữ liệu của chúng tôi. Hãy làm cho PHP thực thi nó cho chúng ta, bằng cách sử dụng hàm mysql_query[]
mysql_connect["localhost", "username", "password"];
mysql_select_db["my_database"];
$query = mysql_query["SELECT id, name, country FROM test_users"];
Hàm mysql_query[] chỉ cần gửi mã SQL đến máy chủ MySQL và sau đó trả về một liên kết đến kết quả. Sau đó, chúng tôi sẽ phải sử dụng một trong nhiều hàm PHP có liên quan để thực sự sử dụng kết quả. Chẳng hạn, chúng ta có thể xem có bao nhiêu hàng được trả về bằng cách sử dụng hàm mysql_num_rows[] [kết nối đã được thực hiện, như minh họa ở trên]
$query = mysql_query["SELECT id, name, country FROM test_users"];
echo "The table currently contains " . mysql_num_rows[$query] . " row[s]";
Tất nhiên, nếu chúng ta chỉ muốn số lượng hàng, sẽ có nhiều cách hiệu quả hơn và sẽ không có lý do gì để chọn cả ba hàng. Thay vì chỉ lấy số lượng hàng, hãy thử thực sự lấy một số dữ liệu
$query = mysql_query["SELECT id, name, country FROM test_users"];
echo "The first name is: " . mysql_result[$query, 0, "name"];
mysql_result[] có thể chọn ra một phần dữ liệu từ liên kết kết quả. Là tham số, chúng tôi chỉ định liên kết truy vấn, chỉ mục hàng và tên của cột mà chúng tôi muốn dữ liệu, vì vậy trong trường hợp này, chúng tôi nhận được kết quả từ tham chiếu kết quả truy vấn $, chúng tôi sử dụng hàng đầu tiên được trả về [số hàng 0] . Điều đó sẽ cho chúng tôi tên đầu tiên trong bảng, sau đó được xuất ra
Trong hầu hết các trường hợp, bạn có thể cần tất cả các hàng dữ liệu mà bạn chọn, cùng với tất cả các cột bạn chọn. Điều này thường được thực hiện với hàm mysql_fetch_array[], hàm này chỉ đơn giản là cung cấp cho bạn toàn bộ hàng dữ liệu dưới dạng một mảng, đồng thời di chuyển con trỏ bên trong lên trước một bước, để hàm sẽ đưa bạn đến hàng đó sau đó vào lần gọi tiếp theo. Điều này làm cho nó tuyệt vời để sử dụng với một vòng lặp, để lần lượt lấy tất cả các hàng. Hãy xem một ví dụ mà chúng ta làm điều đó
$query = mysql_query["SELECT id, name, country FROM test_users"];
while[$row = mysql_fetch_array[$query]]
echo $row["name"] . " is from " . $row["country"] . "
";
Chúng tôi sử dụng vòng lặp while, trong đó chúng tôi gán kết quả của hàm mysql_fetch_array[] cho biến có tên $row trên mỗi lần lặp. Điều này hoạt động vì mysql_fetch_array[] sẽ trả về FALSE khi không còn hàng nào nữa, trong trường hợp đó, vòng lặp while sẽ kết thúc. Miễn là trên thực tế vẫn còn một hàng, mysql_fetch_array[] đặt tất cả các cột và giá trị của chúng vào biến $row, nơi chúng ta có thể truy cập nó từ đó đơn giản bằng cách yêu cầu cùng tên được sử dụng trong mã SQL. Trong ví dụ của chúng tôi, điều đó cho phép chúng tôi truy cập vào id, tên và quốc gia, nhưng để cho nó bớt phức tạp hơn, tôi chỉ sử dụng tên và quốc gia cho đến nay
Vì vậy, đó là những cách cơ bản nhất để lấy dữ liệu ra khỏi cơ sở dữ liệu. Như bạn có thể thấy, nó khá dễ dàng, vì PHP có rất nhiều chức năng hay để làm việc đó, nhưng còn nhiều điều hơn nữa để làm việc với MySQL và chắc chắn còn nhiều điều hơn nữa để viết SQL. Đọc để tìm hiểu thêm về cả hai