การรับผลลัพธ์จากคำสั่ง SQL ใน PHP
ในบทเรียนที่แล้ว เราได้สร้างโค้ดทดสอบขึ้นมา ขอทบทวนส่วนสำคัญของโค้ด ที่ทำการ เรียกสอบถามไปยังฐานข้อมูล:
<?php
$query = 'SELECT * FROM users';
$res = mysqli_query($link, $query) or die(mysqli_error($link));
var_dump($res);
?>
ดังที่คุณเห็น หลังจากที่มีการ
ส่งคำสั่งสอบถามไปยังฐานข้อมูลแล้ว ในตัวแปร $res
ก็จะมีผลลัพธ์จากการกระทำนั้นอยู่ อย่างไรก็ตาม
ผลลัพธ์ไม่ได้อยู่ในรูปแบบที่เราต้องการ
ใน PHP แต่เป็นในรูปแบบที่ฐานข้อมูล
ส่งมาให้เรา
เพื่อที่จะได้รับผลลัพธ์ในรูปแบบ
ที่เราคุ้นเคย จำเป็นต้องใช้ฟังก์ชัน
mysqli_fetch_assoc ซึ่งดึงข้อมูล
หนึ่งแถวออกมาจากผลลัพธ์
ลองมาทดสอบกัน:
<?php
$row = mysqli_fetch_assoc($res);
var_dump($row);
?>
ผลลัพธ์จาก var_dump จะแสดงอาร์เรย์
ของพนักงานคนแรก:
<?php
['id' => 1, 'name' => 'user1', 'age' => 23, 'salary' => 400]
?>
ขณะเดียวกัน จากตัวแปร $res พนักงานคนแรก
จะหายไป และการเรียกใช้ mysqli_fetch_assoc ครั้งถัดไป
จะได้รับพนักงานคนถัดไป
และเราสามารถเรียกใช้ฟังก์ชันของเราได้เรื่อยๆ
จนกว่าพนักงานจะหมด เมื่อใดที่สิ่งนี้เกิดขึ้น การเรียกใช้ฟังก์ชัน
ครั้งถัดไปจะคืนค่า false
มาลองทดสอบกัน:
<?php
$row1 = mysqli_fetch_assoc($res);
var_dump($row1); // พนักงานหมายเลข 1
$row2 = mysqli_fetch_assoc($res);
var_dump($row2); // พนักงานหมายเลข 2
$row3 = mysqli_fetch_assoc($res);
var_dump($row3); // พนักงานหมายเลข 3
$row4 = mysqli_fetch_assoc($res);
var_dump($row4); // พนักงานหมายเลข 4
$row5 = mysqli_fetch_assoc($res);
var_dump($row5); // พนักงานหมายเลข 5
$row6 = mysqli_fetch_assoc($res);
var_dump($row6); // พนักงานหมายเลข 6
$row7 = mysqli_fetch_assoc($res);
var_dump($row7); // จะแสดง NULL - พนักงานหมดแล้ว
?>