Fetch_assoc() là gì? Cách truy xuất dữ liệu MySQL trong PHP

Truy xuất dữ liệu MySQL trong PHP là một phần kiến thức đặc biệt quan trọng, đáng chú ý mà bạn cằn nắm chắc để trở thành một chuyên viên phân tích dữ liệu.  Ở bài viết này, hãy cùng Comdy tìm hiểu xem Fetch_assoc() là gì và các cách để truy xuất dữ liệu Mysql trong PHP ra sao nhé.

Fetch_assoc() là gì?

Fetch_assoc() là gì
Fetch_assoc() là một phương thức thường được sử dụng khi làm việc với kết quả truy vấn SELECT từ cơ sở dữ liệu mysql php.

Mysqli_fetch_assoc là gì? fetch_assoc() là một phương thức trong PHP được sử dụng để lấy một dòng dữ liệu từ kết quả truy vấn của MySQL dưới dạng một mảng kết hợp (associative array). Đây là một phương thức thường được sử dụng khi làm việc với kết quả truy vấn SELECT từ cơ sở dữ liệu mysql php.

Khi bạn thực hiện một truy vấn SELECT bằng các hàm như mysqli_query hoặc PDO::query, bạn có thể sử dụng fetch_assoc trong php để lấy dữ liệu từ kết quả truy vấn dưới dạng một mảng kết hợp, trong đó tên cột là khóa và giá trị là giá trị tương ứng của cột đó trong dòng dữ liệu.

Ví dụ:

// Kết nối đến cơ sở dữ liệu
$conn = new mysqli(“localhost”, “username”, “password”, “database”);
// Kiểm tra kết nối
if ($conn->connect_error) {
    die(“Connection failed: ” . $conn->connect_error);
}
// Thực hiện truy vấn SELECT
$result = $conn->query(“SELECT id, name, email FROM users”);
// Lấy một dòng dữ liệu dưới dạng mảng kết hợp
$row = $result->fetch_assoc();
// Hiển thị thông tin từ dòng dữ liệu
echo “ID: ” . $row[“id”] . “<br>”;
echo “Name: ” . $row[“name”] . “<br>”;
echo “Email: ” . $row[“email”] . “<br>”;
// Đóng kết nối
$conn->close();

Hướng dẫn cách lấy dữ liệu từ database trong PHP

Cách lấy dữ liệu từ database trong PHP
Hướng dẫn chi tiết cách lấy dữ liệu từ database trong PHP

Sử dụng hàm mysql_fetch_array() để lấy dữ liệu từ database trong PHP

Tùy chọn để lấy dữ liệu từ database trong PHP phổ biến nhất là dùng hàm mysql_fetch_array(). Hàm này sẽ trả về hàng ở dạng một mảng liên hợp, một mảng số hoặc có thể là cả 2. Hàm cũng trả về FALSE nếu như không có hàng nào.

Đây là ví dụ đơn giản để truy xuất bản ghi từ bảng có tên là employee:

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'tennguoidung';
   $dbpass = 'matkhau';

   $conn = mysql_connect($dbhost, $dbuser, $dbpass);

   if(! $conn )
   {
      die('Không thể kết nối: ' . mysql_error());
   }

   $sql = 'SELECT emp_id, emp_name, emp_salary FROM employee';
   mysql_select_db('test_db');
   $retval = mysql_query( $sql, $conn );

   if(! $retval )
   {
      die('Không thể lấy dữ liệu: ' . mysql_error());
   }

   while($row = mysql_fetch_array($retval, MYSQL_ASSOC))
   {
      echo "ID :{$row['emp_id']}  <br> ".
         "Tên nhân viên : {$row['emp_name']} <br> ".
         "Lương : {$row['emp_salary']} <br> ".
         "--------------------------------<br>";
   }

   echo "Lấy dữ liệu thành công\n";

   mysql_close($conn);

Hằng MYSQL_ASSOC đã được sử dụng như là một tham số thứ 2 cho hàm mysql_fetch_array(). Kết quả là trả về hàng ở dạng như 1 mảng liên hợp. Với mảng liên hợp đó bạn có thể truy cập field bởi sử dụng tên thay vì sử dụng chỉ mục.

Sử dụng hàm mysql_fetch_assoc() để truy xuất dữ liệu từ database trong PHP

Hàm mysql_fetch_assoc() để truy xuất dữ liệu
Sử dụng hàm mysql_fetch_assoc() để truy xuất dữ liệu từ database trong PHP như thế nào?

Ngoài ra, PHP còn cung cấp hàm khác là mysql_fetch_assoc() cũng trả về hàng ở dạng 1 mảng liên hợp.

Ví dụ:
<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'tennguoidung';
   $dbpass = 'matkhau';

   $conn = mysql_connect($dbhost, $dbuser, $dbpass);

   if(! $conn )
   {
      die('Không thể kết nối: ' . mysql_error());
   }

   $sql = 'SELECT emp_id, emp_name, emp_salary FROM employee';
   mysql_select_db('test_db');
   $retval = mysql_query( $sql, $conn );

   if(! $retval )
   {
      die('Không thể lấy dữ liệu: ' . mysql_error());
   }

   while($row = mysql_fetch_assoc($retval))
   {
      echo "ID :{$row['emp_id']}  <br> ".
         "Tên nhân viên : {$row['emp_name']} <br> ".
         "Lương : {$row['emp_salary']} <br> ".
         "--------------------------------<br>";
   }

   echo "Lấy dữ liệu thành công\n";

   mysql_close($conn);
?>

Sử dụng hằng mysql_num để lấy dữ liệu từ database trong PHP

Hằng mysql_num lấy dữ liệu
Sử dụng hằng mysql_num để lấy dữ liệu từ database trong PHP như thế nào?

Sử dụng hằng mysql_num như là tham số thứ 2 cho hàm mysql_fetch_array(). Việc này sẽ giúp cho hàm đó trả về mảng với chỉ mục ở dạng số.

Ví dụ:

Ví dụ sau sẽ hiển thị tất cả bản ghi từ bảng cố tên employee bởi sử dụng tham số mysql_num trong PHP:

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'tennguoidung';
   $dbpass = 'matkhau';

   $conn = mysql_connect($dbhost, $dbuser, $dbpass);

   if(! $conn )
   {
      die('Không thể kết nối: ' . mysql_error());
   }

   $sql = 'SELECT emp_id, emp_name, emp_salary FROM employee';
   mysql_select_db('test_db');
   $retval = mysql_query( $sql, $conn );

   if(! $retval )
   {
      die('Không thể lấy dữ liệu: ' . mysql_error());
   }

   while($row = mysql_fetch_array($retval, MYSQL_NUM))
   {
      echo "ID :{$row[0]}  <br> ".
         "Tên nhân viên : {$row[1]} <br> ".
         "Lương : {$row[2]} <br> ".
         "--------------------------------<br>";
   }

   echo "Lấy dữ liệu thành công\n";

   mysql_close($conn);
?>

Truy xuất dữ liệu từ cơ sở dữ liệu MySQL

Truy xuất dữ liệu từ cơ sở dữ liệu MySQL
Truy xuất dữ liệu từ cơ sở dữ liệu MySQL với câu lệnh select

Câu lệnh SELECT được sử dụng để truy xuất dữ liệu từ một hoặc nhiều bảng:

SELECT column_name(s) 
FROM table_name

Truy xuất dữ liệu với MySQLi

Ví dụ sau đây truy xuất các cột id, firstname và lastname từ bảng MyGuests và hiển thị nó trên trang:

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
  // output data of each row
  while($row = $result->fetch_assoc()) {
    echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
  }
} else {
  echo "0 results";
}
$conn->close();
?>

Đây là kết quả:

id: 1 - Name: John Doe
id: 2 - Name: Mary Moe
id: 3 - Name: Julie Dooley

Đầu tiên, chúng tôi tạo một truy vấn SQL truy xuất các cột id, firstname và lastname từ bảng MyGuests. Dòng mã tiếp theo sẽ thực thi truy vấn và lưu dữ liệu kết quả vào biến $result.

Sau đó, hàm num_rows() sẽ kiểm tra có dữ liệu trả về hay không.

Nếu có thì hàm fetch_assoc() sẽ gán tất cả kết quả vào một mảng kết hợp mà chúng ta có thể duyệt qua. Vòng lặp while() sẽ duyệt qua tập kết quả rồi hiển thị các cột id, firstname và lastname lên trang.

Ví dụ sau đây tương tự như ví dụ trên, nhưng nó sử dụng MySQLi thủ tục:

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
  die("Connection failed: " . mysqli_connect_error());
}

$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = mysqli_query($conn, $sql);

if (mysqli_num_rows($result) > 0) {
  // output data of each row
  while($row = mysqli_fetch_assoc($result)) {
    echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
  }
} else {
  echo "0 results";
}

mysqli_close($conn);
?>

Đây là kết quả:

id: 1 - Name: John Doe
id: 2 - Name: Mary Moe
id: 3 - Name: Julie Dooley

Truy xuất dữ liệu với PDO

Truy xuất dữ liệu với PDO
Làm thế nào để truy xuất dữ liệu với PDO?

Ví dụ sau sử dụng PDO để truy xuất dữ liệu.

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

try {
  $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  $stmt = $conn->prepare("SELECT id, firstname, lastname FROM MyGuests");
  $stmt->execute();

  // set the resulting array to associative
  $result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
  foreach($stmt->fetchAll() as $row) {
    echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
  }
} catch(PDOException $e) {
  echo "Error: " . $e->getMessage();
}
$conn = null;
echo "</table>";
?>

Đây là kết quả:

id: 1 - Name: John Doe
id: 2 - Name: Mary Moe
id: 3 - Name: Julie Dooley

Lọc dữ liệu từ cơ sở dữ liệu MySQL

Lọc dữ liệu từ cơ sở dữ liệu MySQL
Lọc dữ liệu từ cơ sở dữ liệu MySQL với mệnh đêf where

Mệnh đề WHERE được sử dụng để lọc những bản ghi đáp ứng một điều kiện cụ thể.

SELECT column_name(s) 
FROM table_name 
WHERE column_name operator value

Lọc dữ liệu với MySQLi

Ví dụ sau đây truy xuất các cột id, firstname và lastname từ bảng MyGuests những người có họ là “Doe” và hiển thị nó trên trang:

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT id, firstname, lastname FROM MyGuests WHERE lastname='Doe'";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
  // output data of each row
  while($row = $result->fetch_assoc()) {
    echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
  }
} else {
  echo "0 results";
}
$conn->close();
?>

Đây là kết quả:

id: 1 - Name: John Doe

Đầu tiên, chúng tôi tạo truy vấn SQL truy xuất các cột id, firstname và lastname từ bảng MyGuests những người có họ là “Doe”. Dòng mã tiếp theo sẽ thực thi truy vấn và lưu dữ liệu kết quả vào biến $result.

Sau đó, hàm num_rows() sẽ kiểm tra có dữ liệu trả về hay không.

Nếu có thì hàm fetch_assoc() sẽ gán tất cả kết quả vào một mảng kết hợp mà chúng ta có thể duyệt qua. Vòng lặp while() sẽ duyệt qua tập kết quả rồi hiển thị các cột id, firstname và lastname lên trang.

Ví dụ sau đây tương tự như ví dụ truy xuất dữ liệu trên, nhưng nó sử dụng MySQLi thủ tục:

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
  die("Connection failed: " . mysqli_connect_error());
}

$sql = "SELECT id, firstname, lastname FROM MyGuests WHERE lastname='Doe'";
$result = mysqli_query($conn, $sql);

if (mysqli_num_rows($result) > 0) {
  // output data of each row
  while($row = mysqli_fetch_assoc($result)) {
    echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
  }
} else {
  echo "0 results";
}

mysqli_close($conn);
?>

Đây là kết quả:

id: 1 - Name: John Doe

Lọc dữ liệu với PDO

Ví dụ sau sử dụng PDO để truy xuất dữ liệu.

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

try {
  $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  $stmt = $conn->prepare("SELECT id, firstname, lastname FROM MyGuests WHERE lastname='Doe'");
  $stmt->execute();

  // set the resulting array to associative
  $result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
  foreach($stmt->fetchAll() as $row) {
    echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
  }
} catch(PDOException $e) {
  echo "Error: " . $e->getMessage();
}
$conn = null;
echo "</table>";
?>

Đây là kết quả:

id: 1 - Name: John Doe

Sắp xếp dữ liệu từ cơ sở dữ liệu MySQL

Sắp xếp dữ liệu từ cơ sở dữ liệu MySQL
Câu lệnh ORDER BY được sử dụng để sắp xếp các bản ghi theo thứ tự tăng dần (ASC) theo mặc định

Câu lệnh ORDER BY được sử dụng để sắp xếp các bản ghi theo thứ tự tăng dần (ASC) theo mặc định. Để sắp xếp các bản ghi theo thứ tự giảm dần, hãy sử dụng từ khóa DESC.

SELECT column_name(s) 
FROM table_name 
ORDER BY column_name(s) ASC|DESC

Sắp xếp dữ liệu với MySQLi

Ví dụ sau đây truy xuất các cột id, firstname và lastname từ bảng MyGuests theo thứ tự lastname tăng dần và hiển thị nó trên trang:

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT id, firstname, lastname FROM MyGuests ORDER BY lastname ASC";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
  // output data of each row
  while($row = $result->fetch_assoc()) {
    echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
  }
} else {
  echo "0 results";
}
$conn->close();
?>

Đây là kết quả:

id: 1 - Name: John Doe
id: 3 - Name: Julie Dooley
id: 2 - Name: Mary Moe

Đầu tiên, chúng tôi tạo một truy vấn SQL truy xuất dữ liệu các cột id, firstname và lastname từ bảng MyGuests theo thứ tự lastname tăng dần. Dòng mã tiếp theo sẽ thực thi truy vấn và lưu dữ liệu kết quả vào biến $result.

Sau đó, hàm num_rows() sẽ kiểm tra có dữ liệu trả về hay không.

Nếu có thì hàm fetch_assoc() sẽ gán tất cả kết quả vào một mảng kết hợp mà chúng ta có thể duyệt qua. Vòng lặp while() sẽ duyệt qua tập kết quả rồi hiển thị các cột id, firstname và lastname lên trang.

Ví dụ sau đây tương tự như ví dụ trên, nhưng nó sử dụng MySQLi thủ tục:

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
  die("Connection failed: " . mysqli_connect_error());
}

$sql = "SELECT id, firstname, lastname FROM MyGuests ORDER BY lastname ASC";
$result = mysqli_query($conn, $sql);

if (mysqli_num_rows($result) > 0) {
  // output data of each row
  while($row = mysqli_fetch_assoc($result)) {
    echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
  }
} else {
  echo "0 results";
}

mysqli_close($conn);
?>

Đây là kết quả:

id: 1 - Name: John Doe
id: 3 - Name: Julie Dooley
id: 2 - Name: Mary Moe

Sắp xếp dữ liệu với PDO

Ví dụ sau sử dụng PDO để truy xuất dữ liệu.

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

try {
  $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  $stmt = $conn->prepare("SELECT id, firstname, lastname FROM MyGuests ORDER BY lastname ASC");
  $stmt->execute();

  // set the resulting array to associative
  $result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
  foreach($stmt->fetchAll() as $row) {
    echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
  }
} catch(PDOException $e) {
  echo "Error: " . $e->getMessage();
}
$conn = null;
echo "</table>";
?>

Đây là kết quả:

id: 1 - Name: John Doe
id: 3 - Name: Julie Dooley
id: 2 - Name: Mary Moe

Giới hạn truy xuất dữ liệu từ cơ sở dữ liệu MySQL

Giới hạn truy xuất dữ liệu từ cơ sở dữ liệu MySQL
Giới hạn truy xuất dữ liệu từ cơ sở dữ liệu MySQL bằng cách nào?

MySQL cung cấp mệnh đề LIMIT để chỉ định số lượng bản ghi sẽ trả về.

Mệnh đề LIMIT giúp dễ dàng giới hạn kết quả trả về hoặc phân trang bằng SQL và rất hữu ích trên các bảng lớn. Trả về quá nhiều dữ liệu trong một lần truy vấn có thể ảnh hưởng đến hiệu suất của hệ thống.

Giả sử chúng tôi muốn truy xuất tất cả các bản ghi từ 1 – 30 từ một bảng MyGuests. Truy vấn SQL sẽ trông như thế này:

SELECT id, firstname, lastname 
FROM MyGuests
LIMIT 30

Khi chạy truy vấn SQL ở trên nó sẽ trả về 30 bản ghi đầu tiên.

Nếu chúng tôi muốn truy xuất 10 bản ghi tính từ bản ghi thứ 16 thì sao?

Mysql cũng cung cấp một cách để xử lý việc này đó là sử dụng từ khóa OFFSET. Ví dụ dưới đây minh họa sử dụng từ khóa OFFSET:

SELECT id, firstname, lastname 
FROM MyGuests
LIMIT 10 OFFSET 15

Bạn cũng có thể sử dụng cú pháp sau cũng đạt được kết quả tương tự:

SELECT id, firstname, lastname 
FROM MyGuests
LIMIT 15, 10

Lưu ý: các số được đảo ngược khi bạn sử dụng dấu phẩy.

Kết lại

Trên đây là toàn bộ chia sẻ của Comdy để giúp bạn hiểu rõ hơn về Fetch_assoc() là gì và cách truy xuất dữ liệu MySQL trong PHP. Hi vọng những thông tin trong bài viết này là bổ ích và có ý nghĩa với mọi người. Xin cám ơn.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *