ตย. php+mysqli : show data from database with do while loop, foreach loop
คำอธิบายดูได้จากเว็บไซต์นี้นะครับ http://marcuscode.com/lang/php/loop-statements อธิบายได้ละเอียดดีครับ
มาดูในส่วนของตัวอย่างในบทความนี้ จะพาทำการแสดงผลข้อมูลจากฐานข้อมูล 2 แบบด้วยกัน มาเริ่มกันเลยครับ
ฟรีคอร์ส PHP+MySQLi+AdminLTE
Example Data
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
-- phpMyAdmin SQL Dump -- version 4.8.0.1 -- https://www.phpmyadmin.net/ -- -- Host: 127.0.0.1 -- Generation Time: Jun 18, 2018 at 11:48 AM -- Server version: 10.1.32-MariaDB -- PHP Version: 5.6.36 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET AUTOCOMMIT = 0; START TRANSACTION; SET time_zone = "+00:00"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8mb4 */; -- -- Database: `myweb` -- -- -------------------------------------------------------- -- -- Table structure for table `tb_member` -- CREATE TABLE `tb_member` ( `member_id` int(11) NOT NULL, `username` varchar(100) NOT NULL, `member_name` varchar(100) NOT NULL, `member_lname` varchar(100) NOT NULL, `email` varchar(100) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -- Dumping data for table `tb_member` -- INSERT INTO `tb_member` (`member_id`, `username`, `member_name`, `member_lname`, `email`) VALUES (1, 'devbanban', 'devbanban', 'dotcom', 'devbanban@gmail.com'), (2, 'devbanban', 'devbanban', 'dotcom', 'devbanban@gmail.com'), (3, 'devbanban', 'devbanban', 'dotcom', 'devbanban@gmail.com'), (4, 'devbanban', 'devbanban', 'dotcom', 'devbanban@gmail.com'); -- -- Indexes for dumped tables -- -- -- Indexes for table `tb_member` -- ALTER TABLE `tb_member` ADD PRIMARY KEY (`member_id`); -- -- AUTO_INCREMENT for dumped tables -- -- -- AUTO_INCREMENT for table `tb_member` -- ALTER TABLE `tb_member` MODIFY `member_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5; COMMIT; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; |
Connection database condb.php
1 2 3 4 |
<?php $con= mysqli_connect("localhost","root","passoword","db_myweb") or die("Error: " . mysqli_error($con)); mysqli_query($con, "SET NAMES 'utf8' "); ?> |
Full code index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
<meta charset="UTF-8"> <?php //1. เชื่อมต่อ database: include('condb.php'); //ไฟล์เชื่อมต่อกับ database ที่เราได้สร้างไว้ก่อนหน้าน้ี //2. query ข้อมูลจากตาราง tb_member: $query = "SELECT * FROM tb_member ORDER BY member_id asc" or die("Error:" . mysqli_error()); //3.เก็บข้อมูลที่ query ออกมาไว้ในตัวแปร result . $result = mysqli_query($con, $query); //4 . แสดงข้อมูลที่ query ออกมา โดยใช้ตารางในการจัดข้อมูล: echo '<h4 align="center"> Display Data From database with do…while Loop</h4>'; echo "<table border='1' align='center' width='500'>"; //หัวข้อตาราง echo " <tr align='center' bgcolor='#CCCCCC'> <td>รหัส</td> <td>Uername</td> <td>ชื่อ</td> <td>นามสกุล</td> <td>อีเมล์</td> </tr>"; while($row = mysqli_fetch_array($result)) { echo "<tr>"; echo "<td>" .$row["member_id"] . "</td> "; echo "<td>" .$row["username"] . "</td> "; echo "<td>" .$row["member_name"] . "</td> "; echo "<td>" .$row["member_lname"] . "</td> "; echo "<td>" .$row["email"] . "</td> "; echo "</tr>"; } echo "</table>"; echo '<hr/>'; echo '<h4 align="center"> Display Data From database with foreach Loop </h4>'; echo "<table border='1' align='center' width='500'>"; echo " <tr align='center' bgcolor='#CCCCCC'> <td>รหัส</td> <td>Uername</td> <td>ชื่อ</td> <td>นามสกุล</td> <td>อีเมล์</td> </tr>"; foreach( $result as $value ) { echo "<tr>"; echo "<td>" .$value["member_id"] . "</td> "; echo "<td>" .$value["username"] . "</td> "; echo "<td>" .$value["member_name"] . "</td> "; echo "<td>" .$value["member_lname"] . "</td> "; echo "<td>" .$value["email"] . "</td> "; echo "</tr>"; } echo "</table>"; //5. close connection mysqli_close($con); ?> |
Result
แบบแยกไฟล์และแสดงเวลาโหลดหน้าเว็บ
แบบที่ 1 do while loop
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
<meta charset="UTF-8"> <?php //1. เชื่อมต่อ database: include('condb.php'); //ไฟล์เชื่อมต่อกับ database ที่เราได้สร้างไว้ก่อนหน้าน้ี //2. query ข้อมูลจากตาราง tb_member: $query = "SELECT * FROM tb_member ORDER BY member_id asc" or die("Error:" . mysqli_error()); //3.เก็บข้อมูลที่ query ออกมาไว้ในตัวแปร result . $result = mysqli_query($con, $query); //4 . แสดงข้อมูลที่ query ออกมา โดยใช้ตารางในการจัดข้อมูล: echo '<h4 align="center"> Display Data From database with do…while Loop</h4>'; echo "<table border='1' align='center' width='500'>"; //หัวข้อตาราง echo " <tr align='center' bgcolor='#CCCCCC'> <td>รหัส</td> <td>Uername</td> <td>ชื่อ</td> <td>นามสกุล</td> <td>อีเมล์</td> </tr>"; while($row = mysqli_fetch_array($result)) { echo "<tr>"; echo "<td>" .$row["member_id"] . "</td> "; echo "<td>" .$row["username"] . "</td> "; echo "<td>" .$row["member_name"] . "</td> "; echo "<td>" .$row["member_lname"] . "</td> "; echo "<td>" .$row["email"] . "</td> "; echo "</tr>"; } echo "</table>"; mysqli_close($con); echo '<hr/>'; $time = microtime(); $time = explode(' ', $time); $time = $time[1] + $time[0]; $finish = $time; @$total_time = round(($finish - $start), 2); echo 'Page generated in '.$total_time.' seconds.'; ?> |
แบบที่ 2 foreach loop
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
<meta charset="UTF-8"> <?php //1. เชื่อมต่อ database: include('condb.php'); //ไฟล์เชื่อมต่อกับ database ที่เราได้สร้างไว้ก่อนหน้าน้ี //2. query ข้อมูลจากตาราง tb_member: $query = "SELECT * FROM tb_member ORDER BY member_id asc" or die("Error:" . mysqli_error()); //3.เก็บข้อมูลที่ query ออกมาไว้ในตัวแปร result . $result = mysqli_query($con, $query); //4 . แสดงข้อมูลที่ query ออกมา โดยใช้ตารางในการจัดข้อมูล: echo '<hr/>'; echo '<h4 align="center"> Display Data From database with foreach Loop </h4>'; echo "<table border='1' align='center' width='500'>"; echo " <tr align='center' bgcolor='#CCCCCC'> <td>รหัส</td> <td>Uername</td> <td>ชื่อ</td> <td>นามสกุล</td> <td>อีเมล์</td> </tr>"; foreach( $result as $value ) { echo "<tr>"; echo "<td>" .$value["member_id"] . "</td> "; echo "<td>" .$value["username"] . "</td> "; echo "<td>" .$value["member_name"] . "</td> "; echo "<td>" .$value["member_lname"] . "</td> "; echo "<td>" .$value["email"] . "</td> "; echo "</tr>"; } echo "</table>"; //5. close connection mysqli_close($con); echo '<hr/>'; $time = microtime(); $time = explode(' ', $time); $time = $time[1] + $time[0]; $finish = $time; @$total_time = round(($finish - $start), 2); echo 'Page generated in '.$total_time.' seconds.'; ?> |
สรุปการทำงาน
ระหว่าง do while & foreach loop : ประสิทธิภาพการทำงานก็ไม่ต่างๆกันมากครับ ใช้เวลาโหลดหน้าเว็บพอๆกัน
ตัวอย่างจากการทดสอบเบื้องต้น google chrome, win 8 cpu i7 ram8gb hdd 5200rpm
do while :
- ครั้งที่ 1 = 1529316870.28 seconds.
- ครั้งที่ 2 = 1529316929 seconds.
- ครั้งที่ 3 = 1529316939.55 seconds.
foreach :
- ครั้งที่ 1 = 1529316969.61 seconds.
- ครั้งที่ 2 = 1529316983.51 seconds.
- ครั้งที่ 3 = 1529317003.43 seconds.
ดูแล้วก็ใช้เวลาพอๆกันครับ ยังไม่มีอะไรดีกว่า *อาจจะข้อมูลน้อยด้วยละ
ยังไม่เห็นความแตกต่างถ้ายังใช้แค่พื้นๆ ข้อมูลน้อยๆ ตัวแปรน้อยๆ เพราะฉะนั้นควรเรียนรู้ให้มากๆครับ จะมีบางกรณีที่ได้ใช้แบบไหนแบบหนึ่งแน่นอนครับ…
ref : code count time page load : https://www.phpjabbers.com/measuring-php-page-load-time-php17.html
ตะกร้าสินค้า v1 v2 V3
V1 = 1500 บาท, V2=2,500 บาท, V3=3,500 บาท
ระบบยืม-คืน เบิก-จ่ายพัสดุอุปกรณ์สำนักงาน 6,000 บาท
ระบบแจ้งซ่อมออนไลน์ 1,900 บาท
รวมคลิปสอนทำเว็บไซต์
ร่วมสนับสนุน ค่ากาแฟ ค่าโฮส devbanban.com และทีมงานได้ที่
ธนาคารกรุงไทย สาขาเดอะมอลล์ท่าพระ
ชื่อบัญชี นายพิศิษฐ์ บวรเลิศสุธี เลขที่ 878-0-17747-6
————————————————————————————
ธนาคารไทยพาณิชย์ สาขามหาวิทยาลัยราชภัฏธนบุรี
ชื่อบัญชี นายพิศิษฐ์ บวรเลิศสุธี เลขที่ 406-359094-1
fanpage : https://www.facebook.com/sornwebsites/