Thaimisc.com : PHP กับฐานข้อมูล MySQL (14)
ThaiMisc.Com : Free Webboard | Free GuestBook | Free Poll | Free Ecard Server | Free Java Chat Room | Advertising | Contact Us | Colocation | Web Hosting | เปิดร้านค้าฟรี


Category : Php Developer Print Article Only Print Aticle With Comment
PHP กับฐานข้อมูล MySQL (14)
เขียนโดย เดอะกาฝากไดอารี่ (ball@bbznet.com) , 24-05-2004

อัพเดตแบบแทบจะวันต่อวันแบบนี้ หวังว่าคงถูกใจแฟนานุแฟนกันพอสมควรนะครับ... ส่วนใครติดตามเรื่อง ล้อมคอกก่อนวัวหาย รบกวนอดใจรอหน่อยครับ พอดีติดพันกับ PHP มากไปหน่อยครับหมู่นี้... ส่วนใครที่พอมีพื้นฐานภาษา PHP แล้วอยากลองของจริงบ้าง แต่นึกไม่ออกว่าจะเขียนอะไรดี ก็รบกวนแวะไปเยี่ยมเยียนเว็บไซต์ ไดอารี่หนักกบาลของไอ้บอล ซึ่งกำลังโม้เรื่องโปรเจ็คไดอารี่ โดยเอาพื้นฐานการพัฒนาเว็บแอปพลิเคชั่นที่เรียกว่า ไดอารี่ออนไลน์ ไว้เป็นแนวทางให้นำไปลองพัฒนาเป็นของตนเองดูครับ

คราวที่แล้วแนะนำฟังก์ชัน mysql_fetch_array() ไปแล้ว โดยจะเป็นฟังก์ชันที่เอาไว้สำหรับเก็บข้อมูลระเบียนใดๆ มาไว้ในตัวแปรอะเรย์ครับ จะมีประโยชน์มากเวลาที่ต้องการแสดงรายการระเบียนที่สืบค้นมาทั้งหมด หรือนำไปใช้งานเป็นอะเรย์ 2 มิติ (หรือมากกว่า) ในเว็บแอปพลิเคชั่น... แต่จะยังไม่ขอพูดถึงหรอกนะครับ เพราะนั่นยังเป็นเรื่องในอนาคตที่ผมจะโม้สู่กันอ่านภายหลัง เวลาที่เราจะลงมือประยุกต์การใช้งานจริงๆ

mysql_result()
เป็นอีกฟังก์ชันหนึ่งในการดึงข้อมูลที่สืบค้น (query) มาแสดงผล แต่จะมีความแตกต่างกว่า mysql_fetch_array() ตรงที่ มันจะดึงข้อมูลแบบเฉพาะเจาะจงมาครับ ค่าที่ return จากฟังก์ชันนี้จะเป็นตัวแปรโดดๆ ไม่ใช่ตัวแปรอะเรย์... รูปแบบการใช้งานสามารถใช้ได้ 2 แบบครับ คือ แบบระบุแค่ resource result กับแบบระบุทั้ง resource result และ index ของฟิลด์ (จะเป็นตัวเลข หรือชื่อฟิลด์ก็ได้)

ถ้าเราลองรันโค้ดนี้

<?php

mysql_connect("localhost", "root", "") or die ("ไม่สามารถเชื่อมต่อกับฐานข้อมูลได้"); //ทำการเชื่อมต่อกับฐานข้อมูล
mysql_select_db("company") or die ("ไม่สามารถเลือกใช้ฐานข้อมูลนี้ได้"); //เลือกใช้ฐานข้อมูลชื่อ company
$sql = "SELECT * FROM employee"; //SQL statement.
$result = mysql_query($sql); //ประมวลผลคำสั่ง SQL
$data = mysql_result($result, 0);
echo $data;

?>

ผลลัพธ์ที่ได้ก็คือ เราจะได้ฟิลด์แรกสุดของระเบียนแรกสุด (ระเบียนที่ 0) ซึ่งก็คือ

Meeboon Boonlonluer

นั่นเอง... พูดง่ายๆ คือ หากเราไม่ระบุ index ของฟิลด์ สิ่งที่เราจะได้คือ ค่าฟิลด์แรกสุดนั่นเองครับ

แต่หากเราลองระบุแบบนี้ล่ะ?!?

<?php

mysql_connect("localhost", "root", "") or die ("ไม่สามารถเชื่อมต่อกับฐานข้อมูลได้"); //ทำการเชื่อมต่อกับฐานข้อมูล
mysql_select_db("company") or die ("ไม่สามารถเลือกใช้ฐานข้อมูลนี้ได้"); //เลือกใช้ฐานข้อมูลชื่อ company
$sql = "SELECT * FROM employee"; //SQL statement.
$result = mysql_query($sql); //ประมวลผลคำสั่ง SQL
$data = mysql_result($result, 0, 1);
echo $data;

?>

ผลที่ได้ก็คือ เราจะได้ค่าของฟิลด์ที่ 2 (จำเอาไว้นิดนึงนะครับ การนับค่าระเบียนแรกสุด หรือฟิลด์แรกสุด จะเริ่มจาก 0 เสมอ เหมือนกับการนับ index ของตัวแปรอะเรย์ยังไงยังงั้น) ซึ่งก็คือตำแหน่งของพนักงานมาครับ... ดังนั้นสิ่งที่เราจะได้ก็คือ

Staff

นั่นเอง... แต่ในขณะเดียวกัน หากเราลองเปลี่ยนโค้ดไปเป็นแบบนี้

<?php

mysql_connect("localhost", "root", "") or die ("ไม่สามารถเชื่อมต่อกับฐานข้อมูลได้"); //ทำการเชื่อมต่อกับฐานข้อมูล
mysql_select_db("company") or die ("ไม่สามารถเลือกใช้ฐานข้อมูลนี้ได้"); //เลือกใช้ฐานข้อมูลชื่อ company
$sql = "SELECT * FROM employee"; //SQL statement.
$result = mysql_query($sql); //ประมวลผลคำสั่ง SQL
$data = "ชื่อ ". mysql_result($result, 0, "name"). " ตำแหน่ง ". mysql_result($result, 0, "position");
echo $data;

?>

ผลลัพธ์ที่ได้ก็จะเป็น

ชื่อ Meeboon Boonlonluer ตำแหน่ง Staff

ครับผม...

mysql_result นี้ผมไม่ขอนับเป็นฟังก์ชันที่ต้องจำให้ขึ้นใจ เพราะผมเองก็นานๆ ใช้ที (จริงๆ คือ แทบจะไม่ได้เลยมากกว่า) แต่ผมก็อยากเอามาเล่าสู่กันอ่าน เพราะมีหลายคนที่สอบถามผมมา ถึงความแตกต่างของการใช้งานของฟังก์ชันนี้ เมื่อเทียบกับ mysql_fetch_array() ครับ

mysql_free_result()
เป็นฟังก์ชันที่ไม่ค่อยได้เห็นกันหรอกนะครับ ไม่ค่อยมีใครเขาสอนให้ใช้กัน และหลายๆ คน ก็ไม่ได้คิดจะใช้ด้วยซ้ำไป... หากถามผมว่า มีความจำเป็นอะไรไหม ที่จะต้องใช้ฟังก์ชันนี้ ผมคงตอบได้ว่าไม่จำเป็นมาก

แล้วมันเอาไว้ใช้ทำอะไรล่ะ?!? คำตอบคือ มีเอาไว้เพื่อทำการปล่อยหน่วยความจำที่สงวนเอาไว้ในการประมวลผลคำสั่ง SQL ใดๆ ครับ ซึ่งส่วนมากเรามักจะใช้กับเวลาที่เราทำการสืบค้น (query) ข้อมูลจำนวนมากๆ หลายๆ ระเบียน ซึ่งจะกินหน่วยความจำของเซิร์ฟเวอร์ไปไม่น้อย

แต่ที่ไม่ค่อยมีใครใช้กันก็เนื่องจากสาเหตุหลักๆ 2 ประการ ก็คือ

1. โดยมากแล้ว การสืบค้นจะไม่ค่อยกระทำโดยเงื่อนไขแบบที่จะแสดงข้อมูลมาทั้งหมด เป็นจำนวนมากๆ ในคราวเดียว... โดยมากแล้ว เราควรที่จะทำการจำกัดการแสดงผลข้อมูลเอาไว้ ด้วยเงื่อนไข LIMIT ครับ ค่อยๆ แสดงทีละน้อยๆ หลายๆ ครั้งจนกว่าจะหมด จะช่วยประหยัดทั้งทรัพยากรของเซิร์ฟเวอร์ และช่วยให้เวลาในการประมวลผลแต่ละครั้งสั้นลงด้วย

2. เซิร์ฟเวอร์ในปัจจุบัน มีศักยภาพที่สูงขึ้น หน่วยความจำมีมากเพียงพอที่จะใช้ในการสืบค้นระเบียนจำนวนมากๆ ได้ (หน่วยความจำ 512MB นั้นสามารถสืบค้นข้อมูลหลักหมื่นระเบียนสบายๆ) จึงไม่มีความจำเป็นมากมายนัก และโดยปกติแล้ว หน่วยความจำที่ถูกสงวนเอาไว้ จะถูกปล่อยให้เป็นอิสระไปเอง เมื่อโค้ดจบการทำงาน

แต่ก็รู้ไว้ใช่ว่าจริงไหมครับ ไม่แน่นะ เราอาจจะต้องสืบค้นข้อมูลจำนวนมากๆ มากเสียจนมีความจำเป็นต้องใช้ฟังก์ชันนี้ก็เป็นได้ ผมเลยขอหยิบยกมาเล่าสู่กันอ่านครับ

(ติดตามตอนต่อไป)

<- Back | Next ->

ThaiMisc.Com : Free Webboard | Free GuestBook | Free Poll | Free Ecard Server | Free Java Chat Room | Advertising | Contact Us
Copyright 1999-2006 Thailand Miscellaneous. Allrights reserved. webmaster@thaimisc.com