บทท่ี 7 ระบบจัดการฐานข้อมูล MySQL | 133 7.9.3 ข้อมูลประเภทวันท่ี (Date/time) รปู แบบข้อมลู ประเภทวนั ท่ีและเวลา ตาราง 7.4 ขอ้ มูลประเภทวนั ท่แี ละเวลา ชนดิ ขอ้ มูล รปู แบบ คาอธิบาย สาหรบั เกบ็ ขอ้ มลู วนั สามารถบนั ทึก 'YYYY-MM-DD' ระหว่างวนั ที่ '1000-01-01' ถึง '9999-12- 31' DATE Y ปี ค.ศ. M เดอื น D วนั DATETIME 'YYYY-MM-DD HH:MM:SS' สาหรับเกบ็ ขอ้ มลู วัน และเวลา สามารถ H ชวั่ โมง บนั ทึกระหว่าง '1000-01-01 00:00:00' M นาที ถงึ '9999-12-31 23:59:59' S วินาที TIMESTAMP 'YYYY-MM-DD HH:MM:SS' สาหรบั เกบ็ ขอ้ มลู วันและเวลาสามารถ บนั ทึกระหวา่ ง '1970-01-01 00:00:01' UTC ถึง '2038-01-19 03:14:07' UTC โดยสามารถปรบั ปรงุ วนั เวลาให้เป็น ปัจจุบนั โดยอัตโนมัติ เม่อื มกี าร เพม่ิ /แกไ้ ข ขอ้ มูล ของแต่ละแถวในตาราง TIME 'HH:MM:SS' '-838:59:59' ถึง '838:59:59' YEAR(2|4) กาหนดรปู แบบปี รปู แบบปี สามารถกาหนดรปู แบบได้ 2 แบบ YEAR (2) เชน่ 19 YEAR (4) เชน่ 2519 ถา้ ไมก่ าหนด หมายถงึ 4 การพฒั นาเวบ็ ไซต์ทางธุรกิจชนั้ สูง
134 | บทท่ี 7 ระบบจดั การฐานขอ้ มูล MySQL 7.10 แผนภาพอีอาร์แสดงโครงสรา้ งขอ้ มลู สินค้าโอทอป แผนภาพอีอาร์ท่ีแสดงโครงสรา้ งขอ้ มูลในการเก็บข้อมูลการจาหนา่ ยสินค้าโอทอป ประกอบดว้ ยเอนตีตี้ และแอทริบวิ ต์ ดงั ตอ่ ไปน้ี เอนตตี ้ี Product แสดงข้อมลู สนิ ค้า OTOP โดยเชอื่ มความสัมพนั ธก์ ับ เอนตีต้ี Category และเอนตตี ้ี OrderDetails เอนตีต้ี Category แสดงข้อมลู หมวดหมูส่ นิ ค้า OTOP เอนตีต้ี Order แสดงข้อมูลการสงั่ ซื้อสินค้า โดยเช่อื มความสมั พันธก์ ับ เอนตตี ้ี OrderDetails และเอนตีตี้ Customer เอนตีตี้ OrderDetails แสดงรายการสนิ ค้าในแต่ละการสงั่ ซอื้ โดยเชือ่ มความสัมพนั ธก์ ับ เอนตตี ี้ Product และเอนตีตี้ Order เอนตีต้ี Customer แสดงขอ้ มูลลูกค้า ภาพท่ี 7.11 แผนภาพอีอาร์แสดงโครงสรา้ งขอ้ มลู ระบบจาหน่ายสินคา้ OTOP ท่ีมา : ผู้เขยี น การพัฒนาเวบ็ ไซตท์ างธุรกิจชนั้ สูง
บทท่ี 7 ระบบจดั การฐานขอ้ มูล MySQL | 135 7.11 การสร้างตาราง การสร้างตารางนั้น ผู้ออกแบบตารางจะต้องทาการวิเคราะห์ และออกแบบตารางให้ ละเอียด เพื่อให้ได้โครงสร้างของตารางท่ีสมบูรณ์เก็บข้อมูลได้ถูกต้องครบถ้วน ข้อมูลไม่มีความ ซ้าซ้อน โดยวิเคราะห์จากจานวนตาราง ความสัมพันธ์ระหว่างตาราง โดยมีข้อมูลท่ีสาคัญ ประกอบการสร้างตาราง ดังน้ี 1) ชือ่ ตาราง 2) จานวนคอลัมน์และชอื่ คอลัมน์ 3) รายละเอียดของแต่ละคอลัมน์ เชน่ ชนิดของคอลัมน์, ขนาดของคอลัมน์ และ คุณสมบตั ติ า่ ง ๆ รูปแบบ CREATE TABLE tableName ( column1 datatype, column2 datatype, column3 datatype, .... , PRIMARY KEY ( columnPK ) ); tableName ชือ่ ตาราง column1 ชือ่ คอลัมน์ datatype ชนิดคอลัมน์ columnPK คอลัมน์ที่เปน็ คียห์ ลัก โดยมคี ุณสมบัตเิ พม่ิ เติมของแต่ละคอลัมน์ ดงั น้ี 1. NOT NULL หมายถงึ ข้อมูลที่ต้องกาหนดคา่ เสมอ 2. AUTO_INCREMENT หมายถึง เวลาเพม่ิ ค่าให้กับตาราง คอลมั นจ์ ะเพ่ิมค่าทีละ 1 ให้อตั โนมัติ 3. PRIMARY KEY หมายถงึ คีย์หลกั 4. DEFAULT หมายถงึ ค่าปกติ หรอื ค่าเร่ิมตน้ 5. COMMENT หมายถงึ หมายเหตุสามารถเกบ็ ได้ 1024 ตวั อักษร การพฒั นาเว็บไซตท์ างธุรกิจชนั้ สงู
136 | บทท่ี 7 ระบบจดั การฐานขอ้ มูล MySQL ตาราง 7.5 ตาราง product สาหรับเกบ็ ข้อมูลสินค้า OTOP โดยมพี จนานุกรมขอ้ มูล ดงั นี้ ลาดบั ฟิล์ด ความหมาย ชนิด ขนาด คีย์ 1 ProductID รหัสสินคา้ int 4 PK 2 SupplierID รหัสสถานประกอบการ Int 4 FK 3 CategoryID หมวดหมสู่ นิ คา้ tinnyInt 3 FK 4 Name ช่อื สินคา้ varchar 255 5 Details รายละเอียด text 6 total จานวน int 4 7 Weight น้าหนัก varchar 15 8 Price ราคา float(7,2) 9 Size ขนาด (กวา้ งxยาวxสูง) ซ.ม. varchar 50 10 Total จานวน int 4 11 Unit หนว่ ยนับ varchar 20 12 star ดาว tinnyInt 1 คาสงั่ SQL ในการสร้างตาราง product ดังนี้ CREATE TABLE product ( ProductID int(4) UNSIGNED AUTO_INCREMENT, SupplierID int(4) UNSIGNED, CategoryID tinyint(3) UNSIGNED, Name varchar(255), Details text, Price float(8, 2) UNSIGNED, Total int(4) UNSIGNED, Weight varchar(15), Size varchar(50), unit varchar(20), star tinyint(1) UNSIGNED, PRIMARY KEY (ProductID), ) ENGINE = InnoDB; การพัฒนาเวบ็ ไซต์ทางธุรกจิ ชนั้ สงู
บทท่ี 7 ระบบจัดการฐานข้อมูล MySQL | 137 ตวั อย่าง 7.17 ตาราง orderdetails สาหรับเก็บขอ้ มูลสนิ คา้ ทสี่ ่ังซ้ือ โดยมี พจนานกุ รมขอ้ มลู ดังนี้ ลาดบั ฟลิ ด์ รายละเอยี ด ชนดิ ข้อมุล ขนาด คยี ์ 1 ProductID รหสั สนิ ค้า int 4 PK,FK 2 OrderID รหสั การสั่งซ้ือ tinnyInt 4 PK,FK 3 Amount จานวน int 4 คาสง่ั SQL ในการสร้างตาราง orderdetails ดังนี้ CREATE TABLE orderdetails ( ProductID int(4) UNSIGNED, OrderID tinyint(4) UNSIGNED, Amount int(4) UNSIGNED, PRIMARY KEY (ProductID, OrderID), CONSTRAINT ibfk1 FOREIGN KEY (OrderID) REFERENCES order (OrderID) ON DELETE SET NULL ON UPDATE CASCADE, CONSTRAINT ibfk2 FOREIGN KEY (ProductID) REFERENCES product (ProductID) ON DELETE SET NULL ON UPDATE CASCADE )ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci; ตวั อยา่ ง 7.18 ตาราง Customer สาหรบั เกบ็ ขอ้ มลู สินค้าท่สี ั่งซอื้ โดยมีพจนานกุ รม ขอ้ มลู ดังน้ี ลาดับ ฟลิ ์ด รายละเอียด ชนดิ ขอ้ มลู ขนาด คยี ์ 1 CustomerID รหสั ลกู ค้า int 4 PK 2 CusName ชอื่ -นามสกุลลกู ค้า 3 CusAddress ท่อี ยู่ varchar 255 4 CusProvince รหสั ไปรษณยี ์ varchar 255 5 CusZipcode หมายเลขโทรศัพท์ varchar 199 6 CusMobile หมายเลขโทรศัพท์ varchar 5 7 CusEmail อีเมลล์ varchar 19 8 UserLogin User สาหรับเข้าสู่ระบบ varchar 59 9 UserPassword รหสั ผ่านสาหรบั เขา้ สู่ระบบ varchar 59 varchar 59 การพฒั นาเวบ็ ไซตท์ างธุรกจิ ชนั้ สูง
138 | บทท่ี 7 ระบบจัดการฐานข้อมูล MySQL คาสั่ง SQL ในการสร้างตาราง customer ดงั นี้ CREATE TABLE customer ( CustomerID int(4) UNSIGNED AUTO_INCREMENT, CusName varchar(255), CusAddress varchar(255), CusProvince varchar(199), CusZipcode varchar(5), CusMobile varchar(19), CusEmail varchar(59), UserLogin varchar(59), UserPassword varchar(59), PRIMARY KEY (CustomerID) ) ENGINE = InnoDB; 7.12 การลบตาราง การลบตารางออกจากฐานข้อมูล ด้วยคาสั่ง DROP TABLE ซึ่งมีข้อควรระมัดระวังในการลบ ตาราง เนื่องจากข้อมูลต่าง ๆ ในตารางดังกล่าวจะสูญหาย และไม่สามารถกู้คืนได้ภายหลังจากท่ีลบ ตารางดังกลา่ วแลว้ รูปแบบ DROP TABLE tableName; tableName หมายถึง ชอ่ื ตาราง ตวั อยา่ ง 7.19 การลบตาราง product DROP TABLE product; ตวั อยา่ ง 7.20 การลบตาราง orderdetails การพัฒนาเวบ็ ไซตท์ างธุรกจิ ชนั้ สูง
บทท่ี 7 ระบบจัดการฐานขอ้ มูล MySQL | 139 DROP TABLE orderdetails; 7.13 คาสง่ั เพ่มิ ขอ้ มูล (Insert) คาส่ัง Insert เป็นคาสั่งเพิ่มข้อมูลในตาราง โดยตารางดังกล่าวเราสร้างข้ึนด้วยคาส่ัง CREATE TABLE โดยการเพิม่ ขอ้ มลู มีหลายรูปแบบ 1. การเพมิ่ ขอ้ มลู ไม่ระบุคอลัมน์ 2. การเพ่มิ ข้อมลู ระบุคอลัมน์ 3. การเพิ่มขอ้ มลู ทีละหลายเรคอร์ด 4. การเพม่ิ ขอ้ มลู โดยคัดลอกจากตารางอืน่ 7.13.1 การเพม่ิ ขอ้ มลู ไม่ระบคุ อลมั น์ การเพิ่มข้อมูลในตารางโดยไม่ระบุคอลัมน์สามารถเพิ่มข้อมูลได้ โดยสามารถระบุ เพียงข้อมูลท่ีต้องเพ่ิมเท่านั้น แต่จะต้องทราบรายละเอียดโครงสร้างของตารางว่า ประกอบด้วยคอลัมน์อะไรบ้าง และเป็นคอลัมน์ชนิดอะไร จึงจะสามารถกาหนดค่า (value) โดยต้องใสใ่ หต้ รงกับคอลมั น์ในตารางท่ีเราสร้างขึ้น รปู แบบ INSERT INTO tableName VALUES ( value1 , value2 , value3, ..., valueN); tableName หมายถงึ ชือ่ ตาราง value1, value2, value3, ..., valueN หมายถึง คา่ ขอ้ มูลที่ตอ้ งการเพ่มิ ลงในตาราง ตวั อย่าง 7.21 การเพมิ่ ครมี มะขาม ในฐานข้อมูล INSERT INTO product VALUES (1, 2, 5, 'ครีมมะขาม', 'บารุงผิวให้นุ่มช่มุ ชน่ื ', 200, 50, '120 ml', '4.3x3.0x4.0 ซม.', 'ตลบั ', 4); ผลทไี่ ด้จากคาส่ังข้อมลู ท่ีเพม่ิ เข้าไปจะเป็นดงั นี้ ตาราง product ProductID SupplierID CategoryID Name Details Price total Weight Size Unit star 12 5 ครีมมะขาม บารุงผวิ ใหน้ ุ่มชมุ่ ชืน่ 200 50 120 ml 4.3x3.0x4.0 ตลับ 4 การพัฒนาเวบ็ ไซตท์ างธุรกจิ ชนั้ สงู
140 | บทท่ี 7 ระบบจดั การฐานขอ้ มูล MySQL 7.13.2 การเพม่ิ ขอ้ มูลโดยระบุคอลัมน์ การเพ่ิมข้อมูลท่ีระบุท้ังชื่อคอลัมน์ และข้อมูลท่ีต้องการเพิ่ม โดยลาดับของคอลัมน์ (column) และลาดับของค่า (value) จะต้องจัดเรียงให้ตรงกันเน่ืองจากการเพิ่มข้อมูลจะ เพม่ิ ข้อมลู คอลัมนแ์ ละคา่ ตามลาดบั รปู แบบ INSERT INTO tableName (column2 , column1 , column3, ..., columnN) VALUES ( value2 , value1 , value3, ..., valueN); tableName หมายถงึ ชอ่ื ตาราง column1 , column2 , column3, ..., columnN หมายถงึ คอลัมนใ์ นตาราง value1 , value2 , value3, ..., valueN หมายถงึ คา่ ทีต่ ้องการเพิ่มในตาราง ตัวอย่าง 7.22 การเพมิ่ ข้อมูลในตาราง product INSERT INTO product (ProductID, SupplierID, CategoryID, Name, Details, total, Price, Weight, Size, stockTotal, Unit, star) VALUES (1, 2, 5, 'ครมี มะขาม', 'บารงุ ผิวใหน้ ่มุ ชมุ่ ช่ืน', 50.00, 200, '120 ml', '4.3x3.0x4.0 ซ.ม.', 'ตลบั ', 4); ตัวอย่าง 7.23 การเพ่มิ ข้อมูลในตาราง orderdetails INSERT INTO orderdetails (ProductID, OrderID, Amount) VALUES (1, 1, 2); INSERT INTO orderdetails (ProductID, OrderID, Amount) VALUES (3, 2, 2); ตัวอยา่ ง 7.24 การเพม่ิ ข้อมูลในตาราง customer INSERT INTO customer (CustomerID, CusName, CusAddress, CusProvince, CusZipcode, CusMobile, CusEmail, UserLogin, UserPassword) การพฒั นาเวบ็ ไซต์ทางธุรกจิ ชนั้ สงู
บทท่ี 7 ระบบจดั การฐานขอ้ มูล MySQL | 141 VALUES (1, 'นางสาวกัลยาณี สาริบุตร', '64 หมู่ 5 ต.เมืองใหม่ อ.ศรีบุญเรือง', 'หนองบวั ลาภู', '39180', '042353628', '[email protected]', 'belle1', '37474'); 7.13.3 การเพ่ิมข้อมูลทีละหลายเรคอรด์ การเพ่ิมข้อมูลในคาส่ัง Insert 1 คาสั่ง สามารถเพ่ิมข้อมูลได้จานวน มากกว่า 1 เรคอร์ด โดยระบุข้อมูลเป็นชุด ๆ แต่ละชุดค่ันด้วยเคร่ืองหมาย , ดังตวั อยา่ ง รูปแบบ INSERT INTO tableName ( column1, column2, ..., columnN ) VALUES ( value1, value2, ..., valueN ), ( value1, value2, ..., valueN ), ( value1, value2, ..., valueN ); tableName หมายถงึ ชือ่ ตาราง (value1, value2, ..., valueN) หมายถงึ ค่าที่ตอ้ งการเพ่มิ ในตาราง ตัวอยา่ ง 7.25 คาส่งั Insert 1 คาส่ัง สามารถเพม่ิ ข้อมูลได้จานวนมากกว่า 1 เรคอร์ด INSERT INTO orderdetails (ProductID, OrderID, Amount) VALUES (1, 1, 2), (3, 2, 2), (3, 3, 3), (4, 3, 3); หรือ INSERT INTO orderdetails (ProductID, OrderID, Amount) VALUES (1, 1, 2), (3, 2, 2), (3, 3, 3), (4, 3, 3); 7.13.4 การเพิม่ ขอ้ มูลจากการสืบคน้ มาจากตารางอน่ื การเพิ่มข้อมูลจากการสืบค้นมาจากตารางอื่น เป็นการเพิ่มข้อมูลโดยที่ข้อมูล เหล่าน้ันมีอยู่ในตารางอ่ืนอยู่แล้ว แล้วดาเนินการสืบค้นข้อมูล (select) และนาข้อมูล เหล่าน้ันมาเพ่ิมในตารางท่ีต้องการ โดยมเี งื่อนไข คือ ชนิดของข้อมูล และจานวนของคอลัมน์ ในตารางท้ัง 2 จะต้องตรงกัน จากรูปแบบด้านล่างเป็นการเพิ่มข้อมูลในตาราง table1 โดยข้อมูลท่ีต้องการเพ่ิมน้ัน เป็นข้อมูลท่ีสืบค้นมาจากตาราง table2 โดยที่มีชนิดของข้อมูล ในคอลัมน์ต่างๆทั้งในตาราง table1 (column1t1, column2t1, ..., column_n_t1) และ ตาราง table2 (column1t2, column2t2, ..., column_n_t2) จะต้องตรงกนั การพัฒนาเวบ็ ไซต์ทางธุรกิจชนั้ สงู
142 | บทท่ี 7 ระบบจัดการฐานข้อมูล MySQL ตาราง table2 column2t2 column_n_t2 column1t2 column2t2 column_n_t2 column1t2 column2t1 column_n_t1 ตาราง table1 column1t1 รปู แบบ INSERT INTO table1 ( column1t1, column2t1, ..., column_n_t1 ) SELECT column1t2, column2t2, ..., column_n_t2 FROM table2 WHERE condition; table1 หมายถึง ชื่อตาราง table1 column1t1, column2t1, ..., column_n_t1 หมายถึง คอลมั น์ในตาราง table1 table2 หมายถงึ ชอ่ื ตาราง table2 column1t2, column2t2, ..., column_n_t2 หมายถึง คอลัมน์ในตาราง table2 7.14 คาสั่งสืบคน้ ข้อมูล (Select) คาส่ัง Select เป็นคาส่ังสืบค้นข้อมูลที่อยู่ในตาราง เพ่ือนาข้อมูลไปใช้แสดงผล หรือ ประมวลผลอืน่ ๆ โดยสามารถสืบค้นข้อมลู ท้ังหมดในตาราง หรือเลือกสืบค้นข้อมลู แบบมีเงื่อนไขกไ็ ด้ 7.14.1 การสืบค้นข้อมูลแบบไม่มีเงื่อนไข รปู แบบ SELECT column1, column2, column3 FROM tableName tableName หมายถงึ ช่อื ตาราง column1, column2, column3 หมายถึง คอลัมน์ที่ต้องการสืบค้น โดยสามารถ สืบค้นบางคอลัมน์ในตารางได้โดยระบุชื่อคอลัมน์ลงไป หรือถ้าต้องการสืบค้นทุก คอลมั น์ สามารถใชเ้ ครือ่ งหมาย * แทนชือ่ คอลัมน์ การพัฒนาเวบ็ ไซต์ทางธุรกจิ ชนั้ สงู
บทท่ี 7 ระบบจดั การฐานข้อมูล MySQL | 143 ตวั อยา่ ง 7.26 การสืบค้นข้อมูลแบบไม่มเี ง่ือนไข SELECT * FROM product; สืบคน้ ข้อมูลทุกคอลมั น์จากตาราง product ตวั อยา่ ง 7.27 การสืบค้นข้อมูล SELECT ProductID, Name, Price FROM product; สืบค้นขอ้ มูลคอลมั น์ ProductID, Name, Price จากตาราง product 7.14 2 การสบื คน้ ข้อมลู แบบมีเงื่อนไข เป็นคาส่ังสืบค้นข้อมูลที่อยู่ในตาราง โดยระบุเงื่อนใขข้อมูลท่ีต้องการ เช่น สืบค้นข้อมูลสินค้าเฉพาะสินค้าท่ีได้ 5 ดาวเท่าน้ัน, สืบค้นข้อมูลสินค้าเฉพาะสินค้า ทีม่ ีราคามากกวา่ 100 บาท รปู แบบ SELECT column1, column2, column3 FROM tableName [WHERE conditions] [[GROUP BY expressions] [HAVING condition]] [ORDER BY expression [ ASC | DESC ]] WHERE conditions หมายถึงเงือ่ นไขในการสบื คน้ GROUP BY expressions หมายถึง การจดั กลมุ่ ตามคอลมั น์ที่ระบุใน expressions HAVING condition หมายถงึ เงอ่ื นไขการสืบคน้ ที่อยภู่ ายหลังคาส่ัง GROUP BY ORDER BY expression หมายถึง จัดเรียงข้อมูลตามคอลัมนท์ ร่ี ะบุ โดย ASC เรียงจากนอ้ ยไปหามาก และ DESC เรียงจากมากไปหาน้อย การพัฒนาเว็บไซตท์ างธุรกิจชนั้ สงู
144 | บทท่ี 7 ระบบจดั การฐานขอ้ มูล MySQL ตัวอยา่ ง 7.28 สืบคน้ ข้อมลู ทุกคอลมั น์จากตาราง product เฉพาะราคา (price) มากกวา่ 100 SELECT * FROM product WHERE price > 100; ตัวอย่าง 7.29 สบื ค้นข้อมูลคอลมั น์ Name, price จากตาราง product เฉพาะราคา (price) มากกว่า 100 และชื่อสินค้า (name) ข้ึนต้นด้วยคาว่า น้าพริก โดยเรียงจากราคา (price DESC) มากไปหาราคามาก SELECT Name, price FROM product WHERE price > 100 AND Name LIKE ‘นา้ พริก*’ ORDER BY price DESC; 7.14.3 คาส่ังสืบคน้ ข้อมูลจากหลายตาราง (Joint) จากการเช่ือมโยงข้อมูลจากหลายๆตาราง เราสามารถนาเสนอข้อมูลจาก หลาย ๆ ตาราง ดว้ ยการ joint ตาราง รูปแบบ SELECT table1Column1, table2Column1, table1Column2 FROM table1 LEFT JOIN table2 ON table1Column1= table2Column1 [WHERE conditions] [[GROUP BY expressions] [HAVING condition]] [ORDER BY expression [ ASC | DESC ]] ตวั อย่าง 7.30 การสบื คน้ ข้อมูลจากตาราง product ซง่ึ เก็บข้อมูลสินค้า และตาราง orderdetails เกบ็ ขอ้ มูลรายการส่งั ซือ้ สนิ ค้า การพัฒนาเวบ็ ไซตท์ างธุรกจิ ชนั้ สงู
บทท่ี 7 ระบบจัดการฐานขอ้ มูล MySQL | 145 ตาราง product ตาราง orderdetails ภาพท่ี 7.12 ตวั อยา่ งข้อมูลในตาราง product และตาราง orderdetails ที่มา : ผู้เขยี น จากข้อมูลในตาราง product และข้อมูลในตาราง orderdetails สามารถ แสดงขอ้ มูลรว่ มกันดว้ ยการใช้คาส่ัง join ตาราง ดงั นี้ ตัวอย่าง 7.31 สืบค้นข้อมูลจากหลายตาราง (Joint) สืบค้นข้อมูลจากตาราง product และตาราง orderdetails SELECT product.ProductID AS ProductID, orderdetails.OrderID AS OrderID, product.Name AS Name, orderdetails.Amount AS Amount, การพัฒนาเว็บไซต์ทางธุรกิจชนั้ สูง
146 | บทท่ี 7 ระบบจดั การฐานข้อมูล MySQL product.Price AS Price, (orderdetails.Amount * product.Price) AS Total FROM (orderdetails LEFT JOIN product on (product.ProductID = orderdetails.ProductID) ); ผลการประมวลผลคาสัง่ SQL ภาพท่ี 7.13 ผลการประมวลผลการสบื คน้ ขอ้ มลู จากหลายตาราง ทมี่ า : ผู้เขยี น 7.15 คาสง่ั ปรับปรงุ ข้อมลู (Update) คาส่ังปรบั ปรงุ ขอ้ มูล (Update) เป็นคาส่งั ที่ใช้ในการปรับปรงุ ข้อมูลที่ตอ้ งการในฐานข้อมูล ให้อยู่เปลี่ยนแปลงเป็นข้อมูลที่ผู้ใช้งานต้องการ คาส่ังปรับปรุง 1 คาสั่ง สามารถปรับปรุงข้อมูลได้ มากกว่าหนึ่งเรคคอร์ด จึงควรใช้กับเง่ือนไข WHERE เพ่ือใช้ระบุเง่ือนไขในการปรับปรุงข้อมูล ในตาราง ถ้าไม่ระบุจะเป็นการปรับปรุงข้อมูลทั้งหมดในตาราง คาสั่งปรับปรุงข้อมูลข้อมูลมีรูปแบบ คาสง่ั ดงั นี้ รูปแบบ UPDATE tableName SET column1=value การพัฒนาเวบ็ ไซต์ทางธุรกิจชนั้ สงู
บทท่ี 7 ระบบจดั การฐานข้อมูล MySQL | 147 [, column2=value2] [WHERE <condition>]; UPDATE เปน็ คาส่งั ท่ีต้องมีทุกครัง้ ทตี่ ้องการปรับปรงุ ข้อมูล tableName ช่ือตารางท่ีต้องการปรบั ปรุง SET column1=value ปรับปรงุ ขอ้ มลู column1 ให้มีค่าใหม่คือ value WHERE <condition> เงอ่ื นไขในการปรับปรงุ ข้อมลู ตวั อยา่ ง 7.32 คาส่งั ปรับปรุงข้อมูล (Update) UPDATE product SET price = 100; หมายถึงปรับปรุงข้อมลู price ในตาราง product เปลี่ยนใหม้ คี า่ 100 ตวั อย่าง 7.33 คาสั่งปรบั ปรุงขอ้ มลู แบบมีเงื่อนไข UPDATE product SET price = 90, name = \"นา้ พรกิ แมงดากลมุ่ สตรบี า้ นโนนสมบรู ณ์\" WHERE productID=108; หมายถงึ ปรบั ปรงุ ข้อมูลในตาราง product ท่มี ี productID เทา่ กบั 108 โดย ปรับปรงุ productPrice ให้มคี ่า 90 และปรบั ปรงุ productName ให้มีคา่ “นา้ พริกแมงดากล่มุ สตรีบา้ นโนนสมบูรณ”์ ตวั อย่าง 7.34 คาส่งั ปรบั ปรุงขอ้ มูลแบบมีเงื่อนไขมากกว่า 1 เง่อื นไข UPDATE product SET Price = Price+10 WHERE Price < 50 AND CategoryID =5; หมายถงึ ปรบั ปรงุ ข้อมลู ในตาราง product ทีม่ ี Price นอ้ ยกว่า 50 และ(AND) CategoryID เทา่ กบั 5 โดยปรับปรงุ Price ให้มีคา่ เพ่ิมขึ้น 10 บาท การพัฒนาเวบ็ ไซตท์ างธุรกจิ ชนั้ สูง
148 | บทท่ี 7 ระบบจัดการฐานขอ้ มูล MySQL 7.16 คาส่งั ลบขอ้ มูล (delete) คาส่ังลบข้อมูล (delete) เป็นคาสั่งที่ใช้ในการลบข้อมูลในตารางที่ไม่ต้องการ แต่ละคาสั่ง สามารถลบข้อมูลได้มากกว่าหนึ่งเรคคอรด์ จึงควรใชก้ ับเง่ือนไข WHERE เพือ่ ใช้ระบเุ งื่อนไขในการลบ ขอ้ มลู ในตาราง ถา้ ไมร่ ะบจุ ะเปน็ การลบข้อมูลทัง้ หมดในตาราง คาสั่งลบข้อมลู มรี ปู แบบคาสั่ง ดังน้ี รปู แบบ DELETE FROM tableName [WHERE condition]; DELETE FROM เป็นคาสั่งท่ีต้องมีทุกครัง้ ทต่ี ้องการลบข้อมูล tableName ชื่อตารางทตี่ ้องการลบขอ้ มลู WHERE <condition> เงอื่ นไขในการลบข้อมูล ตวั อย่าง 7.35 การลบแบบไมม่ เี งื่อนไข DELETE FROM province หมายถงึ ลบข้อมูลทง้ั หมดในตาราง province ซง่ึ ควรระวังในการใชค้ าสง่ั DELETE เพราะ เป็นการลบข้อมลู ทง้ั หมดในตาราง ตัวอย่าง 7.36 การลบแบบมีเงอื่ นไข DELETE FROM province WHERE pid=77; หมายถึง ลบข้อมูลในตาราง province ทีม่ ี pid เทา่ กับ 77 ตัวอย่าง 7.37 การลบแบบหลายเง่อื นไข DELETE FROM province WHERE pid=77 or pName LIKE \"นคร*\"; การพัฒนาเวบ็ ไซต์ทางธุรกิจชนั้ สูง
บทท่ี 7 ระบบจัดการฐานขอ้ มูล MySQL | 149 หมายถึง ลบข้อมูลในตาราง province ทีม่ ี pid เท่ากบั 77 หรือ (or) มี name ข้นึ ต้นด้วย คาว่า นคร 7.17 สรุป มายเอสคิวแอล (MySQL) เป็นโปรแกรมระบบจัดการฐานข้อมูลที่มีประสทิ ธภิ าพ เป็นระบบ จัดการฐานข้อมูลเชิงสัมพันธ์ (RDBMS) ปัจจุบันนิยมติดต้ังเป็นฐานข้อมูลสาหรับเว็บแอพลิเคชั่น โดยเฉพาะเว็บที่พัฒนาด้วยภาษา PHP ปัจจุบันก็ยังมีผู้ใช้ฐานข้อมูลมายเอสคิวแอลท่ีมีชื่อเสียง เช่น Facebook, Google, NASA, Netflix, Twitter, Yahoo, YouTube, Wikipedia มายเอสคิวแอลมีระบบการรักษาความปลอดภัย ของข้อมูล โดยผู้ท่ีสามารถใช้งานฐานขอ้ มูลได้ต้องมีบัญชีผู้ใช้งานและรหัสผ่าน อีกท้ังบัญชีผู้ใช้งานแต่ ละบัญชีก็จะมีสิทธิการใช้ข้อมูลท่ีแตกต่างกัน ด้วยการ GRANT กาหนดสิทธิผู้ใช้งานระบบฐานข้อมูล โดยต้องมีการสร้างฐานข้อมูล และภายฐานข้อมูลก็จะมีตารางจานวนมากท่ีเช่ือมโยงกันอยู่ ซ่ึง โครงสร้างตารางจะมีฟิวด์ต่าง ๆ แต่ละฟิวด์จะมีการกาหนดรูปแบบของฟิวด์จะต้องระบุทั้งชนิดของ ข้อมูลและขนาดของข้อมูล โดยสามารถเพ่ิมข้อมูลได้ด้วยคาสั่ง Insert ลบข้อมูลด้วยคาส่ัง Delete ปรบั ปรงุ ขอ้ มูลด้วยคาสั่ง Update และค้นหาข้อมูลด้วยคาส่งั Select คาถามท้ายบท 1. ระะบบจดั การฐานข้อมูลเชงิ สมั พันธ์หมายถึงอะไร มลี กั ษณะโครงสร้างของข้อมูลอย่างไร 2. ใหอ้ ธบิ ายความหมายของโปรแกรมระบบจดั การฐานข้อมลู มายเอสควิ แอล 3. ให้สรา้ งบญั ชีผใู้ ชง้ านฐานข้อมลู มายเอสคิวแอล บัญชีผูใ้ ช้ : udru รหัสผา่ น : 543210 4. ให้ใช้คาส่ังเอสควิ แอลในการกาหนดสิทธ์ิใหก้ ับตาราง Product ของบญั ชผี ู้ใช้ udru โดยมี สิทธิสบื ค้นขอ้ มูลอยา่ งเดยี ว 5. จากแผนภาพอีอาร์ ให้สร้างตารางพจนานุกรมฐานข้อมูลของตาราง โดยกาหนดชนิดของ ข้อมลู และขนาดของขอ้ มูลด้วย Supplier ผูผ้ ลิตสนิ คา้ Product สินคา้ การพัฒนาเวบ็ ไซตท์ างธุรกจิ ชนั้ สูง
150 | บทท่ี 7 ระบบจดั การฐานข้อมูล MySQL 6. จากตารางพจนานุกรมฐานข้อมูลในข้อ 5 ใหท้ าการสรา้ งตารางด้วยคาส่ัง SQL 7. จากตารางในข้อ 6 ใหท้ าการเพม่ิ ข้อมูลด้วยคาสัง่ SQL ในตารางดงั ต่อไปนี้ ตาราง Supplier จดั เกบ็ ข้อมูลผู้ผลิต SupMobile SupID SupName SupAddress 0859123695 0959871452 1 กลมุ่ หัตถกรรมทอผ้าพืน้ เมืองสอ่ งดาว 51 หมู่ 2 ต.ปทมุ วาปี อ.สอ่ งดาว 2 กลมุ่ เกษตรกรเลีย้ งผ้งึ บา้ นเฝา้ ไร่ 99 หมู่ 9 ต.เฝา้ ไร่ อ.เฝ้าไร่ 3 กลุม่ แปรรูปมะขามหวานน้ากอ้ 12 หมู่ 11 ต.น้ากอ้ อ.หลม่ สกั ตาราง Supplier จัดเกบ็ ข้อมูลสินคา้ pID SupID pName pUnit pPrice 1 1 ครีมมะขาม ตลับ 50 ห่อ 150 2 1 ปลาสม้ บ้านไผ่สีทอง กระปกุ 50 กระปกุ 45 3 2 นา้ พรกิ ปลากรอบทรงเครือ่ งไผส่ ที อง โต 200 ผนื 2500 4 3 มะขามแปรรปู สามรส ผนื 1200 กล่อง 50 5 2 ผา้ ซนิ่ ย้อมครามสวยๆงาม ใบ 120 ตัว 300 6 1 ผ้าไหมซิน่ ตนี จกลายโบราณ 7 3 ผ้าฝา้ ยลายพญานาค 8 3 ไขเ่ คม็ ไอโอดนี สมุนไพรใบเตย 9 2 หมอนแปรรูปผ้าพนื้ เมอื ง 10 2 เส้ือผ้าพน้ื เมอื ง 8. จากตารางในข้อ 6 ใหท้ าการปรบั ปรุงขอ้ มูลราคาสินคา้ ที่ช่อื สนิ ค้ามีคาวา่ มะ ลดราคาลงมา 5% โดยใชค้ าส่ัง SQL 9. จากตารางในข้อ 6 ใหท้ าการลบขอ้ มูลของรายการสนิ ค้าทม่ี คี ่าราคาน้อยกวา่ 150 โดยใช้คาสั่ง SQL 10. จากตารางในข้อ 6 คาสงั่ สบื คน้ ขอ้ มลู ของรายการทม่ี ีราคา (price) มากกวา่ 100 และเปน็ สนิ ค้าของกลุ่มหัตถกรรมทอผา้ พน้ื เมอื งสอ่ งดาว โดยใช้คาส่งั SQL การพฒั นาเวบ็ ไซต์ทางธุรกิจชนั้ สูง
บทที่ 8 ภาษา PHP และฐานขอ้ มลู MySQL ในบทท่ีผ่านมาได้กล่าวถึงการบริหารจัดการฐานข้อมูลมายเอสคิวแอล เพื่อใช้จัดเก็บข้อมูล ในบทน้ีจะกล่าวถึงการพัฒนาเว็บด้วยภาษา PHP ที่เชื่อมต่อกับฐานข้อมูลมายเอสคิวแอล ตั้งแต่ ข้ันตอนการทางานระหว่างภาษา PHP และฐานข้อมูลมายเอสคิวแอล การสืบค้นข้อมูลสินค้า ในฐานข้อมูล การเพิ่มข้อมลู สินค้าในฐานข้อมูล การปรับปรุงข้อมูลสินค้า การลบข้อมูลรายการสินค้า เพ่อื ให้สามารถนาไปประยุกตใ์ ชใ้ นการพัฒนาเวบ็ แอพลเิ คชันของตนเองได้ 8.1 ภาษา PHP เชอื่ มตอ่ ฐานข้อมลู MySQL ภาษา PHP เป็นภาษาที่ทางานท่ีฝ่ังเว็บเซิร์ฟเวอร์ สามารถเชื่อมต่อกับฐานข้อมูลต่าง ๆ เช่น Oracle, SQL server, Mysql แล้วดาเนินการประมวลผลข้อมูล ก่อนส่งผลการประมวลผลส่งกลับ ให้กับไคลเอนต์ โดยการเช่ือมตอ่ ฐานข้อมลู มขี ้นั ตอนดงั นี้ 8.1.1 เชื่อมตอ่ ฐานข้อมูล 8.1.2 ประมวลผล 8.1.3 ปดิ การเช่อื มต่อหรือยกเลกิ การเช่ือมต่อฐานข้อมูล ไคลเอนต์ เว็บเซิร์ฟเวอร์ ดาตา้ เบสเซิรฟ์ เวอร์ (ภาษา PHP) (Mysql) ภาพท่ี 8.1 ขนั้ ตอนการทางานของภาษา PHP เชือ่ มต่อกบั ฐานข้อมลู Mysql ทีม่ า : ผู้เขียน จากภาพท่ี 8.1 แสดงขัน้ ตอนการทางานของเว็บแอพลเิ คชันทีม่ ีการเชื่อมต่อกบั ฐานข้อมูล โดยมขี นั้ ตอนดงั นี้ เครือ่ งไคลเอนต์ ร้องขอข้อมลู ไปยังเวบ็ เซริ ฟ์ เวอร์ ภาษา PHP ทเ่ี วบ็ เซริ ฟ์ เวอร์ทาการประมวลผลโดยมีการเชื่อมต่อฐานข้อมูล การพฒั นาเวบ็ ไซต์ทางธุรกิจชนั้ สูง นริ ันดร ผานจิ
152 | บทท่ี 8 ภาษา PHP และฐานข้อมูล MySQL ภาษา PHP เช่ือมต่อฐานข้อมูล แลว้ ส่งคาส่ัง SQL เพื่อประมวลผลข้อมลู ในฐานข้อมลู Mysql ฐานขอ้ มลู Mysql ประมวลผลคาส่ัง SQL เชน่ ค้นหาขอ้ มูล เพิ่มข้อมูล ฐานขอ้ มูล Mysql ส่งผลการประมวลผลคาส่ัง SQL กลับใหก้ บั ภาษา PHP ภาษา PHP แปลงข้อมูลให้อยู่ในรูปแบบภาษา HTML เว็บเซิรฟ์ เวอร์ส่งภาษา HTML จาก ส่งให้กบั เคร่อื งไคลเอนต์ 8.2 การเช่ือมตอ่ ฐานขอ้ มูล ภาษา PHP สามารถเช่ือมตอ่ ฐาน Mysql ได้ 3 รูปแบบดว้ ยกันดังนี้ 8.2.1 การเชอื่ มตอ่ แบบ MySQLi (Object-Oriented) 8.2.2 การเชอ่ื มตอ่ แบบ MySQLi (Procedural) 8.1.3 การเชอ่ื มต่อแบบ PDO 8.2.1 การเชื่อมต่อแบบ MySQLi (Object-Oriented) MySQLi ย่อมาจาก Mysql improved เป็นส่วนขยายของฐานข้อมูล MySQL เป็นคุณสมบัติใหม่ท่ีพัฒนาเพิ่มเติมขึ้นมาในเวอร์ชัน MySQL 4.1.13 ทาให้การ เชื่อมต่อฐานข้อมูลมีประสิทธิภาพมากยิ่งข้ึน การเช่ือมต่อแบบ MySQLi ไม่มีผลต่อการไม่มี ผลต่อการประมวลผลคาสั่ง SQL เดิม อีกท้ังในส่วนของการควบคุมปลอดภัยยังเพิ่มข้ึนและ การทางานคาสั่งจะอยู่ในรูปแบบของ OOP โดยสนับสนุน หรือใหม่กวา่ คณุ สมบตั ขิ อง MySQLi 1. เป็นแบบ Object-Oriented 2. สนับสนนุ คาส่ัง prepared (ปอ้ งกัน SQL Injection) 3. สนบั สนุนหลายคาสง่ั พรอ้ มกัน (Multiple statements) 4. สนับสนุนคาส่งั transactions 5. เพม่ิ เติมการสนับสนนุ debugging อา้ งอิง : http://www.php.net/manual/en/book.mysqli.php ตวั อยา่ ง 8.1 การเชอ่ื ต่อฐานขอ้ มูลแบบ MySQLi (Object-Oriented) <?php $servername = \"localhost\"; $username = \"username\"; $password = \"password\"; การพฒั นาเวบ็ ไซต์ทางธุรกจิ ชนั้ สูง
บทท่ี 8 ภาษา PHP และฐานขอ้ มูล MySQL | 153 // สรา้ งการเชอื่ มตอ่ $conn = new mysqli($servername, $username, $password); // ตรวจสอบการเชอื่ มตอ่ if ($conn->connect_error) { die(\"การเชอ่ื มต่อล้มเหลว :: \" . $conn->connect_error); } echo \"การเชอ่ื มต่อฐานข้อมูลเสรจ็ สมบรุ ณ์\"; ?> 8.2.2 การเชอื่ มต่อแบบ MySQLi (Procedural) เป็นการเชื่อมต่อที่มีลักษณะเหมือนการเช่ือมต่อแบบเดิม คาส่ังต่าง ๆ จะเหมือน แบบเดิมต่างกันตรงคานาหน้าช่ือบ้างบางส่วน เหมาะสาหรับผู้ที่คุ้นเคยกับการเชื่อมต่อ แบบเดิม อา้ งอิง : http://sg2.php.net/manual/en/mysqli.quickstart.dual-interface.php ตัวอยา่ ง 8.2 การเชื่อต่อฐานขอ้ มลู แบบ MySQLi (Procedural) <?php $servername = \"localhost\"; $username = \"username\"; $password = \"password\"; // สรา้ งการเชอื่ มตอ่ $conn = mysqli_connect($servername, $username, $password); // ตรวจสอบการเชอ่ื มตอ่ if (!$conn) { die(\"การเชือ่ มต่อล้มเหลว :: \" . mysqli_connect_error()); } echo \"การเชื่อมต่อฐานขอ้ มูลเสร็จสมบูรณ์\"; ?> การพฒั นาเวบ็ ไซตท์ างธุรกจิ ชนั้ สูง
154 | บทท่ี 8 ภาษา PHP และฐานขอ้ มูล MySQL 8.2.3 การเช่ือมตอ่ แบบ PDO PDO ย่อมาจาก PHP Data Object เป็น Extension หนึ่งในภาษา PHP โดยการทางานจะนาเสนอข้อมูลในรูปแบบเชิงวัตถุ มีหน้าที่ในการจัดการกับฐานข้อมูลโดย สามารถเช่ือมต่อกับฐานข้อมูลได้หลากหลาย เช่น MySQL, Oracle, SQL Server, PostgreSQL หรือ SQLite เป็นต้น โดยผู้พัฒนาไม่ต้องเปลี่ยนรูปแบบโค้ดการทางานของ คาส่ังต่าง ๆ หากตอ้ งการเปลี่ยนฐานข้อมูล PDO จะทาหน้าท่ีเป็นตวั กลางในการเชื่อมต่อกับ ฐานขอ้ มลู ตา่ ง ๆ ภาพที่ 8.2 สถาปตั ยกรรม PDO ทีม่ า : http://slideplayer.com/slide/6626135 จากภาพเป็นการเช่ือมต่อฐานข้อมูล Mysql แบบ PDO ภาษา PHP จะสามารถ เรียกใช้งาน PDO ได้ต้องทาการ เปิดการใช้งาน ส่วนขยาย (extension) php_pdo ใน php.ini โดยนาเครื่องหมาย ; หน้าส่วนขยายออกดงั นี้ ;extension=php_pdo.dll เปล่ียนเป็น extension=php_pdo.dll อา้ งอิง : http://php.net/manual/en/book.pdo.php ตวั อยา่ ง 8.3 การเช่อื ต่อฐานข้อมูลแบบ PDO <?php // กาหนดขอ้ มลู การเชอื่ มตอ่ การพฒั นาเว็บไซต์ทางธุรกจิ ชนั้ สูง
บทท่ี 8 ภาษา PHP และฐานขอ้ มูล MySQL | 155 $servername = \"localhost\"; $username = \"username\"; $password = \"password\"; try { $conn = new PDO(\"mysql:host=$servername;dbname=myDB\", $username, $password); // สง่ คา่ ขอ้ ผดิ พลาดใหก้ ับ exception $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo \"การเช่อื มต่อฐานข้อมลู เสรจ็ สมบุรณ์\"; }catch(PDOException $e){ echo \"การเชื่อมต่อลม้ เหลว :: \" . $e->getMessage(); } ?> 8.3 ปดิ การเชื่อมต่อหรือยกเลกิ การเชือ่ มตอ่ หลังจากที่เชื่อมต่อฐานข้อมูลแล้วจาเป็นต้องยกเลิกการเช่ือมต่อ เพื่อคืนค่าการใช้ทรัพยากร ของเซิร์ฟเวอร์ จากการเชื่อมต่อฐานข้อมูลของภาษา PHP เชื่อมต่อฐาน Mysql ได้ 3 รูปแบบ ในการ ยกเลกิ การเช่ือมตอ่ ต้องพจิ ารณาวา่ การเชือ่ ตอ่ ไปแบบใดต้องทาการยกเลิกการเช่ือมตอ่ แบบนนั้ ดงั น้ี 1. การยกเลกิ การเช่อื มตอ่ แบบ MySQLi (Object-Oriented) $conn->close(); 2. การยกเลิกการเชือ่ มตอ่ แบบ MySQLi (Procedural) mysqli_close($conn); 3. การยกเลิกการเชือ่ มตอ่ แบบ PDO $conn = null; 8.4 การสืบคน้ ข้อมลู คาส่ัง select เป็นคาส่ังในการเลือกหรือค้นหาข้อมูลจากฐานข้อมูล โดยมีรูปแบบการเลือก ข้อมูลท่ีหลายรูปแบบ เง่ือนไขเพ่ือให้ได้ข้อมูลตรงตามท่ีผู้ใช้ต้องการมากท่ีสุด จากตัวอย่างไฟล์ listProduct.php เป็นการคน้ หาข้อมลู ในตาราง product การพัฒนาเว็บไซตท์ างธุรกิจชนั้ สูง
156 | บทท่ี 8 ภาษา PHP และฐานขอ้ มูล MySQL ภาพท่ี 8.3 ไฟล์ listProduct.php แสดงผลการค้นหาสินค้าโอทอป ทม่ี า : ผู้เขยี น ตวั อยา่ ง 8.4 การค้นหาสนิ ค้าโอทอป <html> <head> <title> คน้ หาสนิ คา้ '<?php echo $_GET['productName']; ?>' </title> <link rel=\"stylesheet\" type=\"text/css\" href=\"style.css\"> <meta charset=\"UTF-8\"> </head> <body> <center> // ฟอรม์ รับขอ้ มลู ชอ่ื สนิ คา้ ทตี่ อ้ งการทตี่ อ้ งการคน้ หา <form action=\"listProduct.php\" method=\"get\"> <b class=\"title\">กรุณากรอกช่อื สินคา้ ที่ต้องการ </b> <br/> <input type=\"text\" name=\"productName\"/> <input type=\"submit\" value=\"คน้ หาสินคา้ \"/> </form> <input type=\"reset\" value=\"ยกเลิก\"/> <h1 class=\"title\"> การพฒั นาเว็บไซตท์ างธุรกิจชนั้ สงู
บทท่ี 8 ภาษา PHP และฐานขอ้ มูล MySQL | 157 ผลการค้นหาสินคา้ โอทอป คาวา่ \"<?php echo $_GET['productName']; ?>\" </h1> </center> <?php // กาหนดขอ้ มลู การเชอ่ื มตอ่ $servername = \"localhost\"; $username = \"root\"; $password = “123456”; $dbname = \"OTOP\"; $counter=0; // สรา้ งการเชอื่ มตอ่ $conn = new mysqli($servername, $username, $password, $dbname); $conn-> set_charset(\"utf8\"); // ตรวจสอบการเชอื่ มตอ่ if ($conn->connect_error) { die(\"การเช่ือมต่อล้มเหลว :: \" . $conn->connect_error); } // คาสงั่ Select คน้ หาขอ้ มลู ทาการคน้ หา $sql = \" SELECT ProductID, ProductName, Price, star, unit FROM product WHERE ProductName LIKE '%\". $_GET['productName'] .\"%' \"; //ทาการคน้ หา $result = $conn->query($sql); ?> <table width=\"93%\" border=\"1\"> <tr bgcolor=\"#F1FEC7\"> <th width=\"12%\">ลาดบั </th> <th>ชอื่ สนิ ค้า</th> การพัฒนาเว็บไซต์ทางธุรกจิ ชนั้ สงู
158 | บทท่ี 8 ภาษา PHP และฐานข้อมูล MySQL <th width=\"13%\">ราคา</th> <th width=\"14%\">หนว่ ยนบั </th> <th width=\"8%\">ดาว</th> </tr> <?php // ตรวจสอบจานวนแถวทคี่ น้ หาวา่ มมี ากกว่า 0 หรอื ไม่ if ($result->num_rows > 0) { // วนรอบเพอื่ นาขอ้ มลู ออกมาใชง้ าน while($row = $result->fetch_assoc()) { ?> <tr> <td align=\"center\"><?php echo ++$counter; ?> </td> <td> <a href=\"productDetail.php?pID=<?php echo $row['ProductID'];?>\" target=\"_blank\"> <?php echo $row['ProductName'];?> </a> </td> <td align=\"right\"> <?php echo $row['Price']; ?></td> <td align=\"center\"> <?php echo $row['unit']; ?></td> <td align=\"center\"> <?php echo $row['star']; ?></td> </tr> <?php } }else{ //ถา้ หากไมม่ จี านวนสนิ คา้ ทต่ี รงตามเงอ่ื นไขคาสงั่ select จะแสดงขอ้ มลู หลัง else echo \"ไมพ่ บข้อมลู สนิ คา้ ที่ตอ้ งการค้นหา\"; } // ปิดการเชอ่ื มตอ่ ฐานขอ้ มลู $conn->close(); ?> </table> การพฒั นาเว็บไซตท์ างธุรกิจชนั้ สงู
บทท่ี 8 ภาษา PHP และฐานขอ้ มูล MySQL | 159 </body> </html> 8.5 การเพมิ่ ขอ้ มูล ในการเพิ่มสินค้า OTOP ผู้ใช้งานสามารถเพ่ิมข้อมูลสินค้า OTOP ได้โดยวิธีการกรอก ขอ้ มลู ผ่านฟอร์ม ทาให้ขน้ั ตอนการเพ่ิมขอ้ มลู มี 2 ข้ันตอนคอื insertForm.php insertProduct.php ภาพท่ี 8.4 ขน้ั ตอนการเพิ่มสินคา้ ในฐานข้อมูล ทมี่ า : ผู้เขียน 1. กรอกแบบฟอร์มผ่านฟอร์มทไ่ี ฟล์ insertForm.php เม่ือกดปุ่มบันทึกจะทาการ ส่งข้อมลู ที่กรอกสง่ ไปให้ไฟล์ insertProduct.php เพอื่ เพม่ิ ขอ้ มูล 2. เมื่อไฟล์ insertProduct.php ได้รับข้อมูลจะทาการเชื่อมต่อฐานข้อมูลพร้อม ท้ังเพิ่มข้อมูลสินค้า OTOP โยจะแจ้งผลการเพิ่มข้อมูลว่าสามารถเพ่ิมได้หรือไม่ สามารถเพ่ิมข้อมูลได้ ตัวอย่าง 8.5 แบบฟอร์มสาหรบั รับข้อมลู สินค้า ไฟล์ insertForm.php <html> <head> <title>เพ่มิ สินคา้ โอทอป </title> <meta charset=\"UTF-8\"> <link href=\"style.css\" rel=\"stylesheet\"> <?php $servername = \"localhost\"; $username = \"root\"; $password = “123456”; $dbname = \"OTOP\"; // ฟังกช์ น่ั แสดงรายการหมวดหมสู่ นิ คา้ การพฒั นาเวบ็ ไซต์ทางธุรกิจชนั้ สงู
160 | บทท่ี 8 ภาษา PHP และฐานขอ้ มูล MySQL function getCategoryList(){ global $servername, $username, $password, $dbname; $conn = new mysqli($servername, $username, $password, $dbname); $conn-> set_charset(\"utf8\"); // คน้ หาขอ้ มลู ในตาราง category $result = $conn->query(\"SELECT CategoryID,CateName FROM category ORDER BY CategoryID ASC\"); // แสดงคา่ ในแทก็ select echo \"<select name='CategoryID'>\"; // วนรอบแสดงขอ้ มลู หมวดหมสู่ นิ คา้ ในแทก็ option while($row = $result->fetch_assoc()) { echo \"<option value='\".$row['CategoryID'].\"'>\".$row['CateName'].\"</option>\"; } echo \"</select>\"; $conn->close(); } function getSupplierList(){ global $servername, $username, $password, $dbname; $conn = new mysqli($servername, $username, $password, $dbname); $conn-> set_charset(\"utf8\"); // คน้ หาขอ้ มลู ในตาราง Supplier $result = $conn->query(\"SELECT SupplierID,SupplierName FROM Supplier ORDER BY SupplierID ASC\"); // แสดงคา่ ในแทก็ select echo \"<select name='SupplierID'>\"; while($row = $result->fetch_assoc()) { echo \"<option value='\".$row['SupplierID'].\"'>\".$row['SupplierName'].\"</option>\"; } echo \"</select>\"; $conn->close(); } ?> การพฒั นาเวบ็ ไซตท์ างธุรกิจชนั้ สงู
บทท่ี 8 ภาษา PHP และฐานขอ้ มูล MySQL | 161 </head> <body> <!—แสดงแบบฟอรม์ สาหรับเพมิ่ ขอ้ มลู สนิ คา้ ใหม่ --> <form name=\"form1\" method=\"post\" action=\"insertProduct.php\"> <table width=\"570\" border=\"0\"> <tr> <th colspan=\"2\">เพม่ิ รายการสนิ ค้า OTOP</th> </tr> <tr> <td width=\"24%\">ProductID</td> <td width=\"76%\">รหัสเพ่ิมอตั โนมัติ</td> </tr> <tr> <td>SupplierID</td> <!— เรยี กใชฟ้ ังกช์ นั่ getSupplierList() เพอ่ื แสดงรายชอ่ื ผผู ้ ลติ สนิ คา้ --> <td><?php getSupplierList(); ?> </td> </tr> <tr> <td>CategoryID</td> <br> <!— เรยี กใชฟ้ ังกช์ นั่ getCategoryList() เพอื่ แสดงหมวดหมสู่ นิ คา้ --> <td> <?php getCategoryList(); ?></td> </tr> <tr> <td>ProductName</td> <br> <td><input name=\"ProductName\" type=\"text\" size=\"50\"></td> </tr> <tr> <td>Details</td> <td><textarea name=\"Details\" cols=\"50\" rows=\"5\" ></textarea></td> </tr> การพฒั นาเว็บไซต์ทางธุรกจิ ชนั้ สงู
162 | บทท่ี 8 ภาษา PHP และฐานขอ้ มูล MySQL <tr> <td>Price</td> <td><input name=\"Price\" type=\"text\" ></td> </tr> <tr> <td>Total</td> <td><input name=\"Total\" type=\"text\" size=\"15\"></td> </tr> <tr> <td>Weight</td> <td><input name=\"Weight\" type=\"text\" ></td> </tr> <tr> <td>Size</td> <td><input name=\"Size\" type=\"text\" ></td> </tr> <tr> <td>Unit</td> <td><input name=\"Unit\" type=\"text\" size=\"15\"></td> </tr> <tr> <td>Star</td> <td><input name=\"Star\" type=\"text\" size=\"5\"></td> </tr> <tr> <td> </td> การพัฒนาเว็บไซตท์ างธุรกิจชนั้ สูง
บทท่ี 8 ภาษา PHP และฐานขอ้ มูล MySQL | 163 <td><input type=\"submit\" value=\"เพ่มิ ขอ้ มลู \"> <input type=\"reset\" value=\"ยกเลิก\"> </td> </tr> </table> </form> </body> </html> ภาพที่ 8.5 หนา้ จอไฟล์ insertForm.php แสดงแบบฟอรม์ รับข้อมูล ทมี่ า : ผู้เขียน ตวั อยา่ ง 8.6 การเพ่มิ ขอ้ มูลสินคา้ ในฐานข้อมูล ไฟล์ insertProduct.php <?php $servername = \"localhost\"; $username = \"root\"; $password = “123456”; $dbname = \"OTOP\"; การพฒั นาเว็บไซต์ทางธุรกิจชนั้ สูง
164 | บทท่ี 8 ภาษา PHP และฐานขอ้ มูล MySQL $conn = new mysqli($servername, $username, $password, $dbname); $conn-> set_charset(\"utf8\"); //คาสง่ั ในการเพม่ิ ขอ้ มลู ในฐานตาราง $sql = \" INSERT INTO product(SupplierID, CategoryID, ProductName, Details, Price, total, Weight, Size, unit, star) VALUES (\".$_POST['SupplierID'].\", \".$_POST['CategoryID'].\", '\".$_POST['ProductName'].\"', '\".$_POST['Details'].\"', \".$_POST['Price'].\", \".$_POST['Total'].\", '\".$_POST['Weight'].\"', '\".$_POST['Size'].\"', '\".$_POST['Unit'].\"', \".$_POST['Star'].\") \"; // ทาการตรวจสอบคาสงั่ เอสควิ แอลวา่ เพม่ิ ขอ้ มลู ไดเ้ สร็จสมบรู ณ์หรอื ไม่ if ($conn->query($sql) === TRUE) { echo \"<center><img src='img/true1.jpg'><br/>\"; echo \"เพ่ิมรายการ \".$_POST['ProductName'].\" เสร็จสมบุรณ์</center>\"; } else { echo \"<center><img src='img/false.jpg'><br/>\"; echo \"ไมส่ ามารถเพมิ่ รายการ \".$_POST['ProductName'].\" ได้ </center>\"; echo \"พบข้อผิดพลาด : \" . $conn->error; } //ปิดการเชอื่ มตอ่ ฐานขอ้ มลู $conn->close(); ?> การพฒั นาเว็บไซตท์ างธุรกิจชนั้ สงู
บทท่ี 8 ภาษา PHP และฐานขอ้ มูล MySQL | 165 ภาพท่ี 8.6 หน้าจอไฟล์ insertProduct.php แสดงผลการเพมิ่ ข้อมลู ท่มี า : ผู้เขียน 8.6 การแกไ้ ขข้อมูล คาสง่ั UPDATE เปน็ คาส่งั สาหรับปรับปรงุ แก้ไขข้อมลู ในตาราง โดยการแก้ไขจะทาการแก้ไข ตามเง่ือนไข Where ทผี่ ใู้ ชง้ านกาหนด ในคาส่งั UPDATE ควรกาหนดเงื่อนไขในคาสงั่ ด้วย มิฉะน้นั แลว้ จะเปน็ การแกไ้ ขทกุ ๆ เรคคอร์ดในตาราง โดยมีรปู แบบดงั น้ี รูปแบบ UPDATE table_name SET column1=value, column2=value2, ... WHERE some_column=some_value ตัวอยา่ ง 8.7 ไฟล์ productForm.php หนา้ ฟอร์มสาหรบั แก้ไขข้อมลู ไฟล์ listProduct.php ไฟล์ productDetail.php . productForm.php การพัฒนาเว็บไซต์ทางธุรกจิ ชนั้ สูง
166 | บทท่ี 8 ภาษา PHP และฐานขอ้ มูล MySQL ภาพที่ 8.7 ไฟล์ productForm.php ที่ใชป้ รับปรงุ แกไ้ ขข้อมูล ทม่ี า : ผู้เขียน ตวั อย่าง 8.8 ไฟล์ productForm.php ทใี่ ชป้ รับปรงุ แก้ไขขอ้ มูล <?php $servername = \"localhost\"; $username = \"root\"; $password = “123456”; $dbname = \"OTOP\"; $counter=0; function getCategoryList($cID=0){ global $servername, $username, $password, $dbname; $conn = new mysqli($servername, $username, $password, $dbname); $conn-> set_charset(\"utf8\"); $result = $conn->query(\"SELECT CategoryID,CateName FROM category ORDER BY CategoryID ASC\"); echo \"<select name='CategoryID'>\"; while($row = $result->fetch_assoc()) { $select=\"\"; if ($row['CategoryID'] == $cID){ $select= \"selected\";} echo \"<option value='\".$row['CategoryID'].\"'$select>\".$row['CateName'].\"</option>\"; } echo \"</select>\"; การพฒั นาเว็บไซต์ทางธุรกจิ ชนั้ สงู
บทท่ี 8 ภาษา PHP และฐานขอ้ มูล MySQL | 167 $conn->close(); } function getSupplierList($sID=0){ global $servername, $username, $password, $dbname; $conn = new mysqli($servername, $username, $password, $dbname); $conn-> set_charset(\"utf8\"); $result = $conn->query(\"SELECT SupplierID,SupplierName FROM Supplier ORDER BY SupplierID ASC\"); echo \"<select name='SupplierID'>\"; while($row = $result->fetch_assoc()) { $select=\"\"; if ($row['SupplierID'] == $sID){ $select= \"selected\";} echo \"<option value='\".$row['SupplierID'].\"' $select>\".$row['SupplierName'].\"</option>\"; } //while echo \"</select>\"; $conn->close(); } //getSupplierList // สรา้ งการเชอ่ื มตอ่ $conn = new mysqli($servername, $username, $password, $dbname); $conn-> set_charset(\"utf8\"); //สบื คน้ ขอ้ มลู สนิ คา้ ทม่ี ี ProductID เทา่ กบั คา่ ทส่ี ง่ มา $sql = \" SELECT * FROM product WHERE ProductID=\".$_GET['pID']; // ประมวลผลคาสงั่ SQL $result = $conn->query($sql); //นาขอ้ มลู สนิ คา้ มาเกบ็ ไวท้ ต่ี วั แปร $row $row = $result->fetch_assoc(); การพัฒนาเว็บไซตท์ างธุรกิจชนั้ สูง
168 | บทท่ี 8 ภาษา PHP และฐานข้อมูล MySQL ?> <html> <head> <title>ปรบั ปรุงข้อมลู สนิ คา้ : <?php echo $row['ProductName']; ?></title> <meta charset=\"UTF-8\"> </head> <body> <center> <!-- เมอื่ กดป่ มุ สง่ ขอ้ มลู จะเป็ นการสง่ ขอ้ มลู ไปใหก้ บั productUpdate.php --> <form name=\"form1\" method=\"post\" action=\"productUpdate.php\"> <table width=\"570\" border=\"0\"> <tr> <th colspan=\"2\">แก้ไขข้อมูล : <?php echo $row['ProductName']; ?></th> </tr> <tr> <td width=\"24%\">รหสั สินคา้ </td> <td width=\"76%\"><?php echo $row['ProductID']; ?> <input type=\"hidden\" name=\"ProductID\" value=\"<?php echo $row['ProductID']; ?>\"> </td> </tr> <tr> <td>ผ้ผู ลิตโอทอป</td> <td><?php getSupplierList($row['SupplierID']); ?> </td> </tr> <tr> <td>ประเภทผลติ ภัณฑ์</td> <br> <td> <?php getCategoryList($row['CategoryID']); ?></td> </tr> <tr> <td>ชื่อผลิตภณั ฑ์</td> <br> การพัฒนาเวบ็ ไซตท์ างธุรกิจชนั้ สงู
บทท่ี 8 ภาษา PHP และฐานขอ้ มูล MySQL | 169 <td><input name=\"ProductName\" type=\"text\" size=\"50\" value=\"<?php echo $row['ProductName']; ?>\"></td> </tr> <tr> <td>รายละเอยี ด</td> <td><textarea name=\"Details\" cols=\"50\" rows=\"5\" > <?php echo $row['Details']; ?> </textarea></td> </tr> <tr> <td>ราคา</td> <td><input name=\"Price\" type=\"text\" value=\"<?php echo $row['Price']; ?>\"> บาท </td> </tr> <tr> <td>จานวน</td> <td><input name=\"Total\" type=\"text\" size=\"15\" value=\"<?php echo $row['total']; ?>\"></td> </tr> <tr> <td>นา้ หนกั </td> <td><input name=\"Weight\" type=\"text\" value=\"<?php echo $row['Weight']; ?>\"> กรัม</td> </tr> <tr> <td>ขนาด</td> <td><input name=\"Size\" type=\"text\" value=\"<?php echo $row['Size']; ?>\"> เซนติเมตร</td> </tr> <tr> <td>หน่วยนบั </td> <td><input name=\"Unit\" type=\"text\" size=\"15\" value=\"<?php echo $row['unit']; ?>\"></td> การพัฒนาเว็บไซตท์ างธุรกจิ ชนั้ สงู
170 | บทท่ี 8 ภาษา PHP และฐานขอ้ มูล MySQL </tr> <tr> <td>ดาว</td> <td><input name=\"Star\" type=\"text\" size=\"5\" value=\"<?php echo $row['star']; ?>\"></td> </tr> <tr> <td> </td> <td><input type=\"submit\" value=\"ปรบั ปรงุ ข้อมลู \"> <input type=\"reset\" value=\"ยกเลกิ \"></td> </tr> </table> </form> </center> </body> </html> ตัวอย่าง 8.9 ไฟล์ productUpdate สาหรับปรับปรุงแก้ไขข้อมลู (MySQLi Object-Oriented) <html> <head> <title>ปรับปรงุ ข้อมลู สินคา้ : <?php echo $_POST['ProductName']; ?></ title> <meta charset=\"UTF-8\"> </head> <body> การพัฒนาเว็บไซต์ทางธุรกจิ ชนั้ สงู
บทท่ี 8 ภาษา PHP และฐานขอ้ มูล MySQL | 171 <?php // กาหนดขอ้ มลู การเชอื่ มตอ่ $servername = \"localhost\"; $username = \"root\"; $password = “123456”; $dbname = \"OTOP\"; // เชอื่ มตอ่ ฐานขอ้ มลู $conn = new mysqli($servername, $username, $password, $dbname); $conn-> set_charset(\"utf8\"); // คาสงั่ UPDATE ในการปรบั ปรงุ ขอ้ มลู สนิ คา้ $sql = \" UPDATE product SET SupplierID=\".$_POST['SupplierID'].\" , CategoryID=\".$_POST['CategoryID'].\" , ProductName= '\".$_POST['ProductName'].\"' , Details='\".$_POST['Details'].\"' , Price=\".$_POST['Price'].\" , total=\".$_POST['Total'].\" , Weight='\".$_POST['Weight'].\"' , Size='\".$_POST['Size'].\"' , unit= '\".$_POST['Unit'].\"' , star= \".$_POST['Star'].\" WHERE ProductID=\".$_POST['ProductID'] ; // ตรวจสอบผลการประมวลผลคาสงั่ SQL ในการ UPDATE วา่ เสร็จสมบรุ ณ์หรอื ไม่ if ($conn->query($sql) === TRUE) { echo \"<img src='img/true1.jpg'><br/>\"; echo \"ปรับปรุงรายการ : \".$_POST['ProductName'].\" เสรจ็ สมบุรณ์\"; } else { echo \"<img src='img/false.jpg'><br/>\"; echo \"ไม่สามารถปรบั ปรงุ รายการ \".$_POST['ProductName'].\" ได\"้ ; echo \"พบขอ้ ผิดพลาด : \" . $conn->error; } //ปิดการเชอื่ มตอ่ ฐานขอ้ มลู การพัฒนาเวบ็ ไซตท์ างธุรกิจชนั้ สูง
172 | บทท่ี 8 ภาษา PHP และฐานข้อมูล MySQL $conn->close(); ?> </body> </html> ภาพที่ 8.8 หนา้ จอไฟล์ productUpdate.php ผลการปรับปรุงแก้ไขข้อมลู ทีม่ า : ผู้เขยี น 8.7 การลบขอ้ มลู คาส่ัง DELETE เป็นคาสั่งสาหรับลบข้อมูลออกจากตาราง โดยสามารถลบได้ มากกว่า 1 เรคคอร์ด ในคาสั่ง DELETE 1 คาส่ัง ทั้งนี้ ข้ึนอยู่กับเงื่อนไข Where ซึ่งควร กาหนดเงื่อนไขในคาส่ังด้วย มิฉะน้ันจะเป็นการลบข้อมูลออกจากตารางทั้งหมด โดยมี รูปแบบดงั นี้ รูปแบบ DELETE FROM table_name WHERE some_column = some_value ไฟล์ listProduct.php ไฟล์ productDetail.php . productDelete.php ภาพท่ี 8.9 ขนั้ ตอนการลบรายการสนิ คา้ ทมี่ า : ผู้เขยี น การพัฒนาเวบ็ ไซตท์ างธุรกิจชนั้ สงู
บทท่ี 8 ภาษา PHP และฐานขอ้ มูล MySQL | 173 ขัน้ ตอนการลบข้อมลู รายการสินคา้ ประกอบด้วย ไฟล์ listProduct.php ผ้ใู ช้งานเลอื กสินค้าทีต่ ้องการลบ ไฟล์ productDetail.php จะแสดงรายละเอียดของสินค้าท่ตี ้องการลบ ผใู้ ช้งาน สามารถตรวจสอบรายละเอียดก่อนยืนยันการลบข้อมูล เมื่อผู้ใช้งานแน่ใจแล้ว ว่าต้องการลบข้อมูลให้กดที่ “ลบขอ้ มูล” รหสั สนิ คา้ จะถกู ส่งไปทไี่ ฟล์ productDelete.php เพ่ือทาการลบขอ้ มลู ตัวอยา่ ง 8.10 ไฟล์ productDelete.php สาหรับลบขอ้ มลู (MySQLi Object- Oriented) <?php // กาหนดขอ้ มลู การเชอ่ื มตอ่ ฐานขอ้ มลู $servername = \"localhost\"; $username = \"username\"; $password = \"password\"; $dbname = \"otop\"; // เชอื่ มตอ่ ฐานขอ้ มลู $conn = new mysqli($servername, $username, $password, $dbname); // ตรวจสอบการเชอื่ มตอ่ ฐานขอ้ มลู if ($conn->connect_error) { die(\"การเชอ่ื มต่อล้มเหลว :: \" . $conn->connect_error); } //คาสง่ั เอสควิ แอลลบขอ้ มลู ในตาราง $sql = \"DELETE FROM product WHERE ProductID=\".$_GET['pID'] ; // ทาการประมวลผลคาสงั่ เอสควิ แอล if ($conn->query($sql) === TRUE) { echo \" <center> ลบข้อมูลในฐานขอ้ มูลเสรจ็ สมบูรณ์ </center> \"; } else { echo \"ไมส่ ามารถลบขอ้ มูลในฐานข้อมลู ได้ : \" . $conn->error; } การพัฒนาเวบ็ ไซตท์ างธุรกิจชนั้ สงู
174 | บทท่ี 8 ภาษา PHP และฐานข้อมูล MySQL //ปิดการเชอื่ มตอ่ ฐานขอ้ มลู $conn->close(); ?> ภาพท่ี 8.10 หนา้ จอไฟล์ productDelete.php ผลการลบข้อมูลสนิ ค้า ทม่ี า : ผู้เขยี น 8.8 สรุป ภาษา PHP เป็นภาษาหน่ึงที่ได้รับความนิยมในการพัฒนาเว็บแอพลิเคชันเป็นอย่างมากใน ปจั จุบัน เนือ่ งมาจากโครงสรา้ งภาษาจะคลา้ ยกับภาษา C, Java, C# ทาให้ผทู้ ีเ่ คยศึกษาภาษาเหล่าน้ัน มาสามารถเข้าใจภาษา PHP ได้ง่ายข้ึน อีกท้ังภาษา PHP ยังสามารถเช่ือมต่อกับฐานข้อมูลได้ง่ายอีก ดว้ ย ในตาราเล่มนี้ เป็นการเช่ือมต่อระหว่างภาษา PHP กบั ฐานข้อมลู Mysql ซ่ึงมีด้วยกัน 3 รูปแบบ ดังน้ี 1. การเชื่อมต่อแบบ MySQLi (Object-Oriented) 2. การเช่ือมต่อแบบ MySQLi (Procedural) 3. การเช่ือมต่อแบบ PDO โดยการเชอ่ื มตอ่ พยายามเปน็ การเชือ่ มตอ่ เพอ่ื สนับสนุนการเขียนโปรแกรม เชงิ วัตถุ ลาดบั ข้ันตอนในการพฒั นาเวบ็ เช่อื มต่อกบั ฐานข้อมูล Mysql มขี ้ันตอนดงั นี้ เชื่อมต่อฐานข้อมลู คาส่ังเอสควิ แอล ในการ บรหิ ารจัดการข้อมลู ปดิ การเช่อื มต่อฐานขอ้ มูล ภาพที่ 8.11 สรปุ ข้ันตอนการเชอ่ื มต่อฐานข้อมลู ทีม่ า : ผู้เขียน การพฒั นาเว็บไซตท์ างธุรกิจชนั้ สูง
บทท่ี 8 ภาษา PHP และฐานขอ้ มูล MySQL | 175 คาถามท้ายบท 1. จงอธบิ ายขั้นตอนการเชอ่ื มตอ่ ฐานข้อมลู Mysql ด้วยภาษา PHP 2. จงอธิบายการทางานของเว็บแอ็พลิเคชัน ข้ันตอนการทางานระหว่างเคร่ือง คอมพวิ เตอร์ ไคลแอนต์ เว็บเซริ ฟ์ เวอร์ และดาตา้ เบสเซิร์ฟเวอร์ 3. จงอธบิ ายการเช่ือมต่อฐานข้อมลู แบบ PDO 4. การเชื่อมต่อมายเอสคิวไอแบบ MySQLi Object-Oriented และแบบ MySQLi Procedural แตกต่างกันอยา่ งไร 5. เว็บท่ีมีการเช่ือมต่อฐานข้อมูล เม่ือทางานร่วมกับฐานข้อมูลเสร็จเรียบรอ้ ยแล้วจะต้อง มีการปิดการเชื่อมต่อหรือยกเลิกการเชื่อมต่อ จงอธิบายวิธีการปิดการเชื่อมต่อ ฐานข้อมลู และสาเหตทุ ต่ี อ้ งปิดการเชอื่ มตอ่ ฐานข้อมลู ด้วย 6. จงอธบิ ายประโยชนข์ องการสอบถามขอ้ มลู ฟิล์ดทม่ี ีการเพิ่มอตั โนมตั ิ 7. จงเขียนเว็บดว้ ยภาษา PHP ทาการเพมิ่ ข้อมูลในตาราง Category ดังน้ี ตาราง Category categoryID CateName 7 พชื พนั ธุ์ไม้ 8 อุปกรณ์อีเลค็ โทรนิค 9 การบริการ/ท่องเทย่ี ว 8. จงเขียนเวบ็ ดว้ ยภาษา PHP ทาการปรับปรุงข้อมลู ในตาราง Category โดยปรบั ปรงุ ค่า CateName ตามข้อมูลท่ีผใู้ ช้งานกรอกในฟอรม์ ตัวอย่างเช่น เม่ือสง่ ข้อมูล categoryID เทา่ กบั 8 และ CateName เท่ากบั \"กีฬาและ การเดนิ ทาง\" ตาราง Category categoryID CateName 7 พืชพันธไุ์ ม้ 8 กฬี าและ การเดินทาง 9 การบริการ/ท่องเท่ยี ว การพัฒนาเวบ็ ไซต์ทางธุรกจิ ชนั้ สูง
บทที่ 9 คุกก้ี (Cookie) และ เซสชนั (Session) นอกจากตัวแปรในบทท่ี 4 ท่ีประกาศใช้งานในบทนแี้ ล้ว จะกลา่ วถึงตวั แปรอีกประเภทหน่ึงที่ ทาหน้าที่เกบ็ ขอ้ มลู ตัวแปร ระหวา่ งโปรแกรมเวบ็ เบราวเ์ ซอรแ์ ละเว็บเซริ ์ฟเวอร์ มี 2 ชนิดหลกั ๆ คือ ตวั แปรคุกกี้ (Cookie) และ ตัวแปรเซสชัน (Session) โดยตวั แปรคุกก้ีโปรแกรมเว็บเบราว์เซอร์ สามารถอ่านขอ้ มูลดงั กลา่ วและนามาใชง้ านได้ เช่น ข้อมูลการจดจาเวลาผู้ใชง้ านกรอกในเว็บ เบราวเ์ ซอร์ สว่ นตวั แปรเซสชนั่ จะถูกจดั เก็บไวท้ ่ีเว็บเซิรฟ์ เวอร์ โดยเว็บเซริ ์ฟเวอร์จะทาหน้าที่ใชง้ านตวั แปรเซสชัน เช่น การลอ็ กอนิ เข้าใชง้ านเว็บต่าง ๆ เม่ือผู้ใช้งานทาการเข้าสู่ระบบสาเร็จเว็บเซริ ์ฟเวอร์ จะสรา้ งตวั แปรเซสชัน เว็บเซิรฟ์ เวอร์จะทาการตรวจสอบข้อมูลกบั ตัวแปร ถ้ามีตวั แปรเซสช่ัน อยู่ ผใู้ ชง้ านจะสามารถเขา้ ใชง้ านเวบ็ นั้น ๆ แต่เมื่อออกจากระบบเวบ็ เซริ ์ฟเวอร์ จะทาลายตวั แปรเซสชัน ทาให้ผูใ้ ช้งานไมส่ ามารถใช้งานเว็บไซตน์ น้ั ๆ ได้ เนื่องจากตอนออกจากระบบเว็บเซริ ์ฟเวอรไ์ ด้ทาลาย ตัวแปรเซสชนั แล้ว ในบทน้ีจะกล่าวถึงการสร้างและใชง้ านทง้ั ตัวแปรคกุ ก้ี และตวั แปรเซสชัน เพ่อื นาไป ประยุกต์ใช้ในการพัฒนาเวบ็ ของตนเองต่อไป 9.1 ตวั แปรคุกกี้ (Cookie) และ ตวั แปรเซสชัน (Session) เม่ือโปรแกรมเว็บเบราว์เซอร์ (Web Browser) ที่คอมพิวเตอร์ไคลเอนต์ร้องขอข้อมูลไปยัง เว็บเซิร์ฟเวอร์ (Web Server) เว็บเซิร์ฟเวอร์ก็จะทาการสร้างตัวแปรคุกก้ี (Cookie) แล้วส่งกลับมา ให้กับไคลเอนต์เก็บข้อมูลคุกกี้ไว้ เพื่อให้สามารถนาข้อมูลในคุกกี้มาใช้ใหม่ในภายหลัง ส่วนตัวแปร เซสชัน (Session) ก็ถูกสร้างโดยเคร่ืองเว็บเซิร์ฟเวอร์แต่จะเก็บสถานะของเซสชันไว้ที่เว็บเซิร์ฟเวอร์ ไมส่ ง่ ไปเกบ็ ไว้ทไ่ี คลเอนตเ์ หมือนตัวแปรคกุ กี้ สาหรบั ติดตามและตรวจสอบผ้ใู ช้ ภาพที่ 9.1 การทางานของตัวแปรคกุ ก้ีและตัวแปรเซสชนั่ ทม่ี า : https://docstore.mik.ua/orelly/webprog/webdb/figs/wda_0801.gif การพัฒนาเว็บไซตท์ างธุรกจิ ชนั้ สูง นิรันดร ผานจิ
178 | บทท่ี 9 คกุ กี้ (Cookie) และ เซสชนั่ (Session) 9.2 ตัวแปรคกุ กี้ (Cookie) คกุ ก้ี (Cookie) เป็นไฟล์ขนาดเล็กที่เว็บเซริ ์ฟเวอร์สร้างขึ้นมาแล้ว ทาการส่งมาจัดเก็บไว้ฝง่ั ของไคลเอนต์ เพ่ือประโยชน์ในการตรวจสอบและ ติดตามการทางานของผู้ใช้ โดยตัวแปรคุกก้ีนิยมใช้เพ่ือจัดเก็บประวัติการ เข้าชมเว็บ, ข้อมูลการเลือกสินค้ารถเข็นสาหรับร้านค้าออนไลน์, รหัสผ่าน เข้าสู่ระบบและขอ้ มูลอื่น ๆ เป็นตน้ ข้อมูลท่ีจัดเก็บในคุกก้ีไม่ควรเป็นข้อมูลลับ เน่ืองจากไฟล์คุกก้ีมีรูปแบบการจัดเก็บข้อมูล เป็น text ไฟล์เท่าน้ันเอง ตัวแปรคุกกี้สามารถกาหนดวันหมดอายุได้ และสามารถเรียกใช้ตัวแปร คุกกี้ได้จนกว่าจะหมดอายุหรือถูกลบค่าออกไปด้วยคาสั่ง unset() โดยตัวแปรคุกก้ีจะคงอยู่แม้ว่ามี การปิดหรือรีสตาร์ทเคร่ืองไคลเอนต์ใหม่ก็ตามถ้าหากยังไม่หมดอายุ โดยที่เซิร์ฟเวอร์สามารถ เปลยี่ นแปลงคา่ ในตัวแปรคุกกีไ้ ด้ HTTP Request HTTP Response+ Set Cookie HTTP Response+ Cookie HTTP Response ภาพท่ี 9.2 การสรา้ งและรับสง่ ค่าตวั แปรระหว่างไคลเอนต์และเซิร์ฟเวอร์ ทีม่ า : ผู้เขียน ไคลเอนต์ทาการร้องขอขอ้ มูลจากเว็บเซอร์เวอร์ เวบ็ เซอร์เวอร์ประมวลผลแลว้ ทาการสง่ ขอ้ มูลกลบั มาใหไ้ คลเอนต์ พรอ้ มทงั้ คุกก้ี เมื่อไคลเอนต์ทาการร้องขอข้อมูลครั้งต่อ ๆ ไปทาการส่ง Cookie ไปให้กับเว็บ เซอร์เวอรด์ ้วย เว็บเซอร์เวอรร์ บั ขอ้ มูลแล้วทาการประมวลผลแล้วสง่ ข้อมลู กลับให้ไคลเอนต์ การพฒั นาเว็บไซต์ทางธุรกจิ ชนั้ สูง
บทท่ี 9 คุกกี้ (Cookie) และ เซสชนั่ (Session) | 179 ภาพที่ 9.3 การจดจาอีเมลลส์ าหรับการล็อกอินเขา้ ส่รู ะบบเวบ็ ไซต์ facebook.com ที่มา : https://www.facebook.com/ 9.2.1 การสร้างตัวแปรคุกกี้ เปน็ คาสั่งที่กาหนดใหเ้ ว็บเซริ ์ฟเวอรส์ ร้างตัวแปรคุกก้ี รูปแบบ setcookie(name, value, expire); name หมายถึง ชอ่ื ตวั แปร value หมายถึง ค่าตัวแปร expire หมายถงึ อายคุ ุกกี้ ใช้วิธีการคานวณ เชน่ time()+(3600*24*7) มีอายุ 7 วนั จาก (1 ชวั่ โมง * 24 ชัว่ โมง * 7 วนั ) ตวั อย่าง 9.1 setcookie(\"username\", \"admin\",time()+3600); หมายถงึ สร้างตัวแปรคุกกช้ี ่อื username เกบ็ ค่า admin มีอายุ 1 ชวั่ โมง ตวั อย่าง 9.2 setcookie(\"email\", \"[email protected]\", time()+(3600*24*7)); หมายถึงสร้างตัวแปรคกุ ก้ชี ่ือ email เกบ็ ค่า [email protected] มี อายุ 7 วนั (1 ชัว่ โมง * 24 ชว่ั โมง * 7 วัน) การพฒั นาเว็บไซตท์ างธุรกจิ ชนั้ สงู
180 | บทท่ี 9 คุกกี้ (Cookie) และ เซสชนั่ (Session) ตวั อยา่ ง 9.3 setcookie(\"password\", $pass); สร้างตัวแปรคุกกี้ช่ือ password เก็บค่าท่ีตัวแปร $pass จะมีอายุจนกว่า เว็บเบราว์เซอร์จะปิดข้อมูลของตัวแปรคุกก้ีก็จะถูกทาลาย เน่ืองจากไม่ได้กาหนด อายขุ องตวั แปรคุกกี้ 9.2.2 การเรียกใชต้ วั แปรคกุ กี้ ในการเรียกใช้ตัวแปรคุกกี้สามารถเรียกใช้ด้วยการกาหนดตัวแปรแบบคุกก้ี ด้วย $_COOKIE[] รูปแบบ $_COOKIE[ 'cookie_name' ] ตวั อยา่ ง 9.4 $_COOKIE['username'] ตวั อยา่ ง 9.5 ไฟล์ cookie.php <!DOCTYPE html> <?php // สรา้ ง cookie setcookie('cookie_name', 'อดุ รธานี', time() + (3600) ); ?> <html> <body> <?php // ตรวจสอบวา่ มกี ารกาหนดคา่ cookie ชอ่ื $cookie_name หรอื ยัง if(!isset($_COOKIE['cookie_name'])) { echo \"ยังไม่มกี ารสรา้ ง Cookie ช่ือ 'cookie_name' ครบั \"; } else { echo \"Cookie ช่ือ 'cookie_name' ถกู สรา้ งแลว้ ครับ\"; echo \"โดยมีค่า : \" . $_COOKIE['cookie_name']; } ?> <p> การพฒั นาเวบ็ ไซตท์ างธุรกจิ ชนั้ สูง
บทท่ี 9 คุกกี้ (Cookie) และ เซสชนั่ (Session) | 181 <p> <a href=\"delete.php\"> ลบ cookie</a> </p> <strong>หมายเหตุ : </strong> นักศึกษาทดลองผลการเปดิ เว็บเพ็จครงั้ แรก แลว้ ทาการรเี ฟรสเวบ็ เพ็จ 1 ครั้งแลว้ สังเกตุ ขอ้ มูล </p> </body> </html> ภาพที่ 9.4 เวบ็ เขา้ มาครั้งแรก ยังไม่มีการสรา้ งตวั แปรคุกก้ี ที่มา : ผ้เู ขียน ภาพท่ี 9.5 เวบ็ ทม่ี ีการสรา้ งตัวแปรคุกก้ีแลว้ ท่มี า : ผ้เู ขียน การพัฒนาเวบ็ ไซตท์ างธุรกจิ ชนั้ สงู
182 | บทท่ี 9 คกุ กี้ (Cookie) และ เซสชนั่ (Session) 9.2.3 การเปลีย่ นแปลงข้อมูลตวั แปรคุกกี้ การเปล่ียนแปลงข้อมูลตัวแปรคุกก้ี สามารถทาได้ท้ังข้อมูลที่บันทึกในตัวแปรคุกก้ี หรือ ระยะเวลาหมดอายุของตัวแปรคุกกี้ จากตัวอย่างการกาหนดตัวแปรคุกกี้ cookie_name setcookie('cookie_name', 'อุดรธานี', time() + 3600 ); สามารถเปลี่ยนแปลงตัวแปรคุกกี้ cookie_name ไดด้ ังนี้ 1. การเปล่ียนแปลงข้อมูลท่ีบันทึกในตัวแปรคุกก้ี สามารถเปลี่ยนแปลงได้เลยโดย ไมต่ อ้ งกาหนดเหมอื นการสร้างตวั แปรคกุ ก้ีใหม่ ตัวอย่างเช่น $_COOKIE['cookie_name']= 'บงึ กาฬ'; หมายถงึ ใหท้ าการเปล่ียนแปลงข้อมลู ในตวั แปรคุกก้ี cookie_name (เดมิ 'อุดรธานี') เปลย่ี นเป็น 'บงึ กาฬ' 2. การเปลย่ี นแปลงข้อมลู วันเวลาหมดอายุของตัวแปรคุกก้ี กาหนดเหมือนการสรา้ ง ตัวแปรคุกกี้ใหม่ โดยเปลยี่ นแปลงอายขุ องตัวแปรคุกก้ี โดยชือ่ ตัวแปรคุกกใ้ี ชช้ ือ่ เดิม ไมต่ ้องเปลย่ี น setcookie('cookie_name', 'อดุ รธานี', time() + (60*5) ); หมายถึง ใหท้ าการเปล่ยี นแปลงอายขุ องตวั แปรคุกก้ี cookie_name จากเดมิ มีอายุ 1 วนั (3600 = 60*60*24) เปล่ียนเป็น 5 นาที (60*5) 9.2.4 การลบหรือยกเลกิ ตัวแปรคกุ ก้ี การลบหรือยกเลิกตวั แปรคุกกีส้ ามารถทาไดด้ ังนี้ วิธีท่ี 1. ใชค้ าสั่ง unset() unset( $_COOKIE['cookie_name'] ); วธิ ที ี่ 2. กาหนดวนั เวลาหมดอายขุ องตวั แปรคุกกี้ย้อนหลงั การพัฒนาเวบ็ ไซตท์ างธุรกิจชนั้ สงู
บทท่ี 9 คกุ กี้ (Cookie) และ เซสชนั่ (Session) | 183 setcookie(\"cookie_name'\", \"\", time() - 3600); ตัวอย่าง 9.6 ไฟล์ cookieDelete.php <!DOCTYPE html> <?php // ลบคกุ กี้ setcookie('cookie_name', '', time() - 3600 ); ?> <html> <body> <?php // ตรวจสอบวา่ มกี ารกาหนดคา่ cookie ชอ่ื $cookie_name หรอื ยัง if(!isset($_COOKIE['cookie_name'])) { echo \"ยงั ไมม่ กี ารสร้างคุกกี้ช่ือ 'cookie_name' ครบั <br>\"; } else { echo \"คกุ กชี้ ื่อ 'cookie_name' ถกู สรา้ งแล้วครับ<br>\"; echo \"โดยมีคา่ : \" . $_COOKIE['cookie_name']; } ?> <p> <p> <a href=\"cookie.php\"> หน้าแรก cookie</a> </p> <strong>หมายเหตุ : </strong> นักศึกษาทดลองผลการเปิดเว็บเพจ็ ครงั้ แรก แล้วทาการรีเฟรสเว็บเพจ็ 1 ครั้งแล้ว สงั เกตุข้อมลู </p> </body> </html> 9.3 เซสชัน (Session) ตัวแปรเซสชัน (Session) เป็นตัวแปรท่ีสามารถส่งผ่านข้อมูลระหว่างเว็บเพจที่อยู่ในโดเมน เดียวกันได้ ตัวแปรเซสชันจะถูกสร้างโดยเว็บเซิร์ฟเวอร์ และถูกจัดเก็บไว้ท่ีเว็บเซิร์ฟเวอร์ ไม่ส่งกลับ มาให้ไคลเอ็นเหมือนกับตัวแปรคุกก้ี ด้วยเหตุนี้ ตัวแปรเซสชันจึงมีความปลอดภัยในการเก็บรักษา การพัฒนาเวบ็ ไซตท์ างธุรกิจชนั้ สงู
Search
Read the Text Version
- 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
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175
- 176
- 177
- 178
- 179
- 180
- 181
- 182
- 183
- 184
- 185
- 186
- 187
- 188
- 189
- 190
- 191
- 192
- 193
- 194
- 195
- 196
- 197
- 198
- 199
- 200
- 201
- 202
- 203
- 204
- 205
- 206
- 207
- 208
- 209
- 210
- 211
- 212
- 213
- 214
- 215
- 216
- 217
- 218
- 219
- 220
- 221
- 222
- 223
- 224
- 225
- 226
- 227
- 228
- 229
- 230
- 231
- 232
- 233
- 234