Thaimisc.com : PHP กับฐานข้อมูล MySQL (15)
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 (15)
เขียนโดย เดอะกาฝากไดอารี่ (ball@bbznet.com) , 04-06-2004
หายหน้าไปนานครับ แหะ แหะ ช่วงนี้ทำงาน + ติดเกมพอสมควร เลยทำให้ทุ่มเวลาไปกับสองสิ่งนี้ซะเป็นส่วนใหญ่ แต่ก็ไม่ลืมที่จะมาอัพเดตหรอกนะครับ

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

แต่นั่นก็ยังเป็นเนื้อหาที่ยังอยู่อีกไกล... ก่อนหน้านั้น เรากลับมาที่เรื่องของฐานข้อมูล company ของเรากันก่อนนะครับ ยังจำได้ไหมว่าเราเพิ่งแทรกข้อมูลเข้าไปในตาราง employee เพียงแค่ระเบียนเดียวเท่านั้นเอง... มาคราวนี้เราจะทำการเขียนโค้ดเพื่อที่จะแทรกระเบียนเพิ่มเติมเข้าไปครับ

เป้าหมายของเราก็คือ รายชื่อเหล่านี้ครับ

Meeboon BoonlonluerStaffAccounting8500
Sompong NongsomchaiManagerAccounting30000
Rangsan SooksriStaffIT12000
Roongsri SooksriStaffPersonnel10000
Boonmak SilpsookManagerPersonnel35000
Somchai SooksawadManagerIT40000
Chidchom ChomchanStaffProduction8000
Samnieng NillsookEngineerProduction20000
Kangwan KongsilpWebmasterIT15000
Narong SooksamranManagerProduction40000

ยกเว้น Meeboon Boonlonluer ที่เราใส่เข้าไปเป็นระเบียนแรก (ระเบียนที่ 0) แล้ว ที่เหลือจะต้องทำการแทรกเข้าไปในตาราง employee ให้เรียบร้อย... ซึ่งถามว่ายากไหม?!? มองเผินๆ อาจจะมองว่าเป็นเรื่องยากนะครับ แต่จริงๆ แล้ว เราสามารถอาศัยโค้ดง่ายๆ ในการแทรกข้อมูลเข้าไปเท่านั้นเอง ลองมาดูกันไหมครับ

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

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

<?php

mysql_connect("localhost", "root", "") or die ("ไม่สามารถเชื่อมต่อกับฐานข้อมูลได้"); //ทำการเชื่อมต่อกับฐานข้อมูล
mysql_select_db("company") or die ("ไม่สามารถเลือกใช้ฐานข้อมูลนี้ได้"); //เลือกใช้ฐานข้อมูลชื่อ company

//เริ่มแทรกระเบียนลงในฐานข้อมูล

$sql = "INSERT INTO employee (name, position, department, salary) VALUES ('Sompong Nongsomchai', 'Manager', 'Accounting', '30000')";
$result = mysql_query($sql);

$sql = "INSERT INTO employee (name, position, department, salary) VALUES ('Rangsan Sooksri', 'Staff', 'IT', '12000')";
$result = mysql_query($sql);

$sql = "INSERT INTO employee (name, position, department, salary) VALUES ('Roongsri Sooksri', 'Staff', 'Personnel', '10000')";
$result = mysql_query($sql);

$sql = "INSERT INTO employee (name, position, department, salary) VALUES (Boonmak Silpsook', 'Manager', 'Personnel', '35000')";
$result = mysql_query($sql);

$sql = "INSERT INTO employee (name, position, department, salary) VALUES ('Somchai Sooksawad', 'Manager', 'IT', '40000')";
$result = mysql_query($sql);

$sql = "INSERT INTO employee (name, position, department, salary) VALUES ('Chidchom Chomchan', 'Staff', 'Production', '8000')";
$result = mysql_query($sql);

$sql = "INSERT INTO employee (name, position, department, salary) VALUES ('Samnieng Nillsook', 'Engineer', 'Production', '20000')";
$result = mysql_query($sql);

$sql = "INSERT INTO employee (name, position, department, salary) VALUES ('Kangwan Kongsilp', 'Webmaster', 'IT', '15000')";
$result = mysql_query($sql);

$sql = "INSERT INTO employee (name, position, department, salary) VALUES ('Narong Sooksamran', 'Manager', 'Production', '40000')";
$result = mysql_query($sql);

?>

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

ไม่แน่นำให้ใช้วิธีนี้นะครับ แต่ว่า สำหรับมือใหม่หัดขับ การทำแบบนี้อาจจะให้บทเรียนที่ดี (และอาจต้องจำจนวันตาย) แก่เราได้

วิธีที่ 2
วิธีนี้ดีขึ้นมาอีกนิด โดยการขจัดเอาส่วนที่ต้องพิมพ์ซ้ำๆ เดิมๆ ได้แก่ $result = mysql_query($sql); ออกไป ให้เหลือเฉพาะเท่าที่จำเป็น โดยการประยุกต์เอาเรื่องของการวนลูปของโค้ดเข้ามาช่วยครับ... มาดูตัวอย่างกันดีกว่า จะได้เข้าใจง่ายขึ้น

<?php

mysql_connect("localhost", "root", "") or die ("ไม่สามารถเชื่อมต่อกับฐานข้อมูลได้"); //ทำการเชื่อมต่อกับฐานข้อมูล
mysql_select_db("company") or die ("ไม่สามารถเลือกใช้ฐานข้อมูลนี้ได้"); //เลือกใช้ฐานข้อมูลชื่อ company

//เริ่มสร้างตัวแปรอะเรย์เก็บข้อมูลคำสั่ง SQL

$sql[0] = "INSERT INTO employee (name, position, department, salary) VALUES ('Sompong Nongsomchai', 'Manager', 'Accounting', '30000')";
$sql[1] = "INSERT INTO employee (name, position, department, salary) VALUES ('Rangsan Sooksri', 'Staff', 'IT', '12000')";
$sql[2] = "INSERT INTO employee (name, position, department, salary) VALUES ('Roongsri Sooksri', 'Staff', 'Personnel', '10000')";
$sql[3] = "INSERT INTO employee (name, position, department, salary) VALUES (Boonmak Silpsook', 'Manager', 'Personnel', '35000')";
$sql[4] = "INSERT INTO employee (name, position, department, salary) VALUES ('Somchai Sooksawad', 'Manager', 'IT', '40000')";
$sql[5] = "INSERT INTO employee (name, position, department, salary) VALUES ('Chidchom Chomchan', 'Staff', 'Production', '8000')";
$sql[6] = "INSERT INTO employee (name, position, department, salary) VALUES ('Samnieng Nillsook', 'Engineer', 'Production', '20000')";
$sql[7] = "INSERT INTO employee (name, position, department, salary) VALUES ('Kangwan Kongsilp', 'Webmaster', 'IT', '15000')";
$sql[8] = "INSERT INTO employee (name, position, department, salary) VALUES ('Narong Sooksamran', 'Manager', 'Production', '40000')";

//จากนั้นวนลูปเพื่อรันคำสั่ง SQL ที่ถูกเก็บเอาไว้ในอะเรย์ โดยวนลูปเป็นจำนวนเท่ากับจำนวนสมาชิกของตัวแปรอะเรย์ $sql ทั้งหมด

for ($i = 0; $i < count($sql); $i++) {

$result = mysql_query($sql[$i]);

}

?>

ถึงตรงนี้เราได้เรียนรู้ฟังก์ชันเพิ่มมาอีก 1 ฟังก์ชันครับ นั่นก็คือ count() ซึ่งมีเอาไว้เพื่อนับจำนวนสมาชิกในตัวแปรอะเรย์นั่นเอง... ถ้าเราเขียนโค้ดออกมาเป็น echo count($sql); จะมีความหมายเท่ากับให้แสดงค่าจำนวนสมาชิกของตัวแปรอะเรย์ $sql นั่นเองครับ

โค้ดข้างต้นนั้น จะเก็บข้อมูลเป็นอะเรย์เอาไว้จากนั้นค่อยมาวนลูป เพื่อทำการรันคำสั่ง SQL ที่เก็บไว้ในสมาชิกอะเรย์แต่ละตัว ส่งผลให้โค้ดสั้นลงไปอีก เนื่องจากไม่ต้องมาพิมพ์ $result = mysql_query($sql); หลายรอบนั่นเอง

แบบนี้ดีขึ้นมาอีกหน่อย แต่ไม่คิดบ้างเหรอครับ ว่าเราสามารถเขียนโค้ดให้รัดกุม และง่ายต่อการแก้ไขในกรณีที่ผิดได้มากกว่านี้?!? ลองเอากลับไปคิดเป็นการบ้านครับ ตอนหน้าผมจะมาเฉลย

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

<- 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