array,portal.scitech.au.edu/.../uploads/2019/08/worksheet-6.docx · web viewint : สำหร...
TRANSCRIPT
Worksheet 6
Array, foreach Loops, and MySQL Database
ขอมลเพมเตม:
Array: https://www.w3schools.com/php7/php7_arrays.asp
foreach Loops: https://www.w3schools.com/php7/php7_loop_for.asp
Array
Array คอการสรางตวแปรทสามาถเกบคาไดหลายคาภายใตชอตวแปรเดยว
การสรางตวแปร array สามารถสรางไดหลายวธ อาทเชน
$cars = array("Volvo", "BMW", "Toyota");
หรอ
$cars[0] = "Volvo";$cars[1] = "BMW";$cars[2] = "Toyota";
โดยตำาแหนงของคาใน array สามารถสรางโดยใชตวอกษรนอกจากตวเลขกได อาทเชน
$age = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43");
หรอ
$age['Peter'] = "35";$age['Ben'] = "37";$age['Joe'] = "43";
แบบฝกหดท1: การเรยกใชคาใน array
<?php$cars = array("Volvo", "BMW", "Toyota");echo "I like " . $cars[0] . ", " . $cars[1] . " and " . $cars[2] . ".";
$age = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43");echo "Peter is " . $age['Peter'] . " years old.";?>
foreach Loop
foreach Loop ใน PHP สามารถนำามาใชกบตวแปร array เพอวนคาในตวแปร array ทละหนงคา ตงแตคาแรกถงคาสดทายในแตละรอบเพอนำามาประมวลผลภายใตวงเลบพนทของ foreach loop
foreach ($array as $value) {
//code to be executed;
}
แบบฝกหดท2: การใช foreach loop เพอแสดงคาของตวแปร array $colors
<?php $colors = array("red", "green", "blue", "yellow");
foreach ($colors as $value) { echo "$value <br>";}?>
MySQL Database
MySQL คอ open source ถกคดคนโดย MySQL AB ในสวเดน และตอมาถก takeover โดย Sun
Microsystems ในป 2008 และกควบรวมกบ Oracle ในป 2010 ม function การทำางานแบบ relation
database management system (RDBMS) โดยอาศย Structured Query Language (SQL) เปนภาษาในสอสาร โดยเจาตว MySQL นสามารถรนไดทงบน Linux, UNIX และ Windows ซงดวยความหลากหลายของมนแลว แตคนกยงคงใชแตกบงาน web-based ซะสวนใหญ เพราะฉะนนจงไดมการออกแบบเจาตว MySQL ใหเปนสวนหนงในระบบ open source enterprise stack หรอทเราเรยกวา ” LAMP”
เปดการทำางานของ MYSQL
เปด web browser พมพ URL ท Install XAMPP เชน http://localhost ในกรณพนฐาน และเลอกเมน phpMyAdmin ดานขวาบน
แบบฝกหดท3: การสราง ฐานขอมล ชอ SCHOOL และ ตารางการเกบคาชอ STUDENT โดยตองการเกบคา 4 อยาง คอ เลขรหสประจำาตว ชอ นามสกล และ อาย
1. เลอก เมน New ดานซายบน
2. ตงชอฐานขอมล ระบ Collation คลกทปม Create
ตามตวอยางเราตองการสรางฐานขอมลชอ SCHOOL และ Collation รองรบภาษาไทย
3. จะเหนรายชอฐานขอมล SCHOOL ทเพงสรางเพมขนมาทเมนดานซายมอ จากนนใหระบชอของตารางทตองการสราง และจำานวนของโครงสรางขอมลทตองการ ตามตวอยางเราตองการสรางตารางชอ STUDENT เกบคา 4 อยาง คอ เลขรหสประจำาตว ชอ นามสกล และ อาย
4. จากนนใหระบรายละเอยดของ เลขรหสประจำาตว ชอ นามสกล และ อาย เพอการจดเกบ
Datatype in MYSQL
VARCHAR : สำาหรบเกบขอมลประเภทตวอกษร ทกครงทเลอกชนดของฟลดเปนประเภทน จะตองม การกำาหนดความยาวของขอมลลงไปดวย ซงสามารถกำาหนดคาไดตงแต 1 - 255 ฟลดชนดน เหมาะ สำาหรบการเกบขอมลสนๆ เชน ชอ นามสกล หรอหวขอตางๆ เปนตน... ในสวนฟลดประเภทน จะ สามารถเลอก "แอตทรบวต" เปน BINARY ได โดยปกตแลวการจดเรยงขอมลเวลาสบคน (query) สำาหรบ VARCHAR จะเปนแบบ case-sensitive (ตวอกษรใหญ และเลกมความหมายแตกตางกน) แต หากระบ "แอตทรบวต" เปน BINARY ปบ การสบคนจะไมคำานงตวอกษรวาจะเปนตวใหญ หรอตวเลก
CHAR : สำาหรบเกบขอมลประเภทตวอกษร แบบทถกจำากดความกวางเอาไวคอ 255 ตวอกษร ไม สามารถปรบเปลยนไดเหมอนกบ VARCHAR หากทำาการสบคนโดยเรยงตามลำาดบ กจะเรยงขอมล แบบ case-sensitive เวนแตจะกำาหนดแอตทรบวตเปน BINARY ทจะทำาใหการเรยงขอมลเปนแบบ non
case-sensitive เชนเดยวกบ VARCHAR
TINYTEXT : ในกรณทขอความยาวๆ หรอตองการทจะคนหาขอความ โดยอาศยฟเจอร FULL TEXT
SEARCH ของ MySQL เราอาจจะเลอกทจะไมเกบขอมลลงในฟลดประเภท VARCHAR ทมขอจำากด แค 256 ตวอกษร แตเราจะเกบลงฟลดประเภท TEXT แทน โดย TINYTEXT น จะสามารถเกบขอมล ได 256 ตวอกษร ซงมองเผนๆ กไมตางกบเกบลงฟลดประเภท CHAR หรอ VARCHAR(255) เลย แต จรงๆ มนตางกนตรงท มนทำา FULL TEXT SEARCH ได
TEXT : สำาหรบเกบขอมลประเภทตวอกษร เชนเดยวกบ TINYTEXT แตสามารถเกบไดมากขน โดย สงสดคอ 65,535 ตวอกษร หรอ 64KB เหมาะสำาหรบเกบขอมลพวกเนอหาตางๆ ทยาวๆ
MEDIUMTEXT : เกบขอมลประเภทตวอกษร เชนเดยวกบ TINYTEXT แตเกบขอมลได 16,777,215 ตวอกษร
LONGTEXT : เกบขอมลประเภทตวอกษร เชนเดยวกบ TINYTEXT แตเกบขอมลได 4,294,967,295 ตวอกษร
TINYINT : สำาหรบเกบขอมลชนดตวเลขทมขนาด 8 บต ขอมลประเภทนเราสามารถกำาหนดเพมเตม ในสวนของ "แอตทรบวต" ไดวาจะเลอกเปน UNSIGNED หรอ UNSIGNED ZEROFILL โดยจะม ความแตกตางดงน
- UNSIGNED : จะหมายถงเกบคาตวเลขแบบไมมเครองหมาย แบบนจะทำาใหสามารถเกบคาได ตงแต 0 - 255
- UNSIGNED ZEROFILL : เหมอนขางตน แตวาหากขอมลทกรอกเขามาไมครบตามจำานวน หลกทเรากำาหนด ตว MySQL จะทำาการเตม 0 ใหครบหลกเอง เชน ถากำาหนดใหใสได 3 หลก แลวทำาการเกบขอมล 25 เขาไป เวลาทสบคนด เราจะไดคาออกมาเปน 025 หากไมเลอก "แอ ตทรบวต" สงทเราจะไดกคอ SIGNED นนกคอตองเสยบตนงไปเกบเครองหมาย บวก/ลบ ทำา ใหสามารถเกบขอมลไดอยในชวง -128 ถง 127 เทานน
SMALLINT : สำาหรบเกบขอมลประเภทตวเลขทมขนาด 16 บต จงสามารถเกบคาไดตงแต -32768 ถง 32767 (ในกรณแบบคดเครองหมาย) หรอ 0 ถง 65535 (ในกรณ UNSIGNED หรอไมคดเครองหมาย)ซงสามารถเลอก Attribute เปน UNSIGNED และ UNSIGNED ZEROFILL ไดเชนเดยวกบ TINYINT
MEDIUMINT : สำาหรบเกบขอมลประเภทตวเลขทมขนาด 24 บต นนกหมายความวาสามารถเกบ ขอมลตวเลขไดตงแต -8388608 ไปจนถง 8388607 (ในกรณแบบคดเครองหมาย) หรอ 0 ถง 16777215 (ในกรณทเปน UNSIGNED หรอไมคดเครองหมาย) ซงสามารถเลอก Attribute เปน UNSIGNED และ UNSIGNED ZEROFILL ไดเชนเดยวกบ TINYINT
INT : สำาหรบเกบขอมลประเภทตวเลขทมขนาด 32 บต หรอสามารถเกบขอมลไดตงแต -2147483648 ไปจนถง 2147483647 ครบ (ในกรณแบบคดเครองหมาย) หรอ 0 ถง 4294967295 (ในกรณทเปน UNSIGNED หรอไมคดเครองหมาย) ซงสามารถเลอก Attribute เปน UNSIGNED และ UNSIGNED ZEROFILL ไดเชนเดยวกบ TINYINT
BIGINT : สำาหรบเกบขอมลประเภทตวเลขทมขนาด 64 บต สามารถเกบขอมลไดตงแต - 9223372036854775808 ไปจนถง 9223372036854775807 เลยทเดยว (แบบคดเครองหมาย) หรอ 0 ถง
18446744073709551615 (ในกรณทเปน UNSIGNED หรอไมคดเครองหมาย) ซงสามารถเลอก Attribute
เปน UNSIGNED และ UNSIGNED ZEROFILL ไดเชนเดยวกบ TINYINT
FLOAT[(M,D)] : ทกลาวถงไปทงหมด ในตระกล INT นนจะเปนเลขจำานวนเตม หากเราบนทกขอมล ทมเศษทศนยม มนจะถกปดทนท ดงนนหากตองการจะเกบคาทเปนเลขทศนยม ตองเลอกชนดขอฟลด เปน FLOAT โดยจะเกบขอมลแบบ 32 บต คอมคาตงแต -3.402823466E+38 ไปจนถง -1.175494351E- 38, 0 และ 1.175494351E-38 ถง 3.402823466E+38
DOUBLE[(M,D)] : สำาหรบเกบขอมลประเภทตวเลขทศนยม เชนเดยวกบ FLOAT แตมขนาดเปน 64 บต สามารถเกบไดตงแต -1.7976931348623157E+308 ถง -2.2250738585072014E-308, 0 และ 2.2250738585072014E-308 ถง 1.7976931348623157E+308
DECIMAL[(M,D)] : สำาหรบเกบขอมลประเภทตวเลขทศนยม เชนเดยวกบ FLOAT แตใชกบขอมลท ตองการความละเอยดและถกตองของขอมลสง ขอสงเกต เกยวกบขอมลประเภท FLOAT, DOUBLE
และ DECIMAL กคอ เวลากำาหนดความ ยาวของขอมลในฟลด จะถกกำาหนดอยในรปแบบ (M,D) ซงหมายความวา ตองมการระบวา จะใหม ตวเลขสวนทเปนจำานวนเตมกหลก และมเลขทศนยมกหลก เชน ถาเรากำาหนดวา FLOAT(5,2) จะ หมายความวา เราจะเกบขอมลเปนตวเลขจำานวนเตม 5
หลก และทศนยม 2 หลก ดงนนหากทำาการใส ขอมล 12345.6789 เขาไป สงทจะเขาไปอยในขอมลจรงๆ กคอ 12345.68 (ปดเศษใหมจำานวนหลก ตามทกำาหนดไว)
DATE : สำาหรบเกบขอมลประเภทวนท โดยเกบไดจาก 1 มกราคม ค.ศ. 1000 ถง 31 ธนวาคม ค.ศ.
9999 โดยจะแสดงผลในรปแบบ YYYY-MM-DD
DATETIME : สำาหรบเกบขอมลประเภทวนท และเวลา โดยจะเกบไดตงแต 1 มกราคม ค.ศ. 1000 เวลา 00:00:00 ไปจนถง 31 ธนวาคม ค.ศ. 9999 เวลา 23:59:59 โดยรปแบบการแสดงผล เวลาททำาการสบคน (query) ออกมา จะเปน YYYY-MM-DD HH:MM:SS
TIMESTAMP[(M)] : สำาหรบเกบขอมลประเภทวนท และเวลาเชนกน แตจะเกบในรปแบบของ YYYYMMDDHHMMSS หรอ YMMDDHHMMSS หรอ YYYYMMDD หรอ YYMMDD แลวแต วาจะระบคา M เปน 14, 12, 8 หรอ 6 ตามลำาดบ สามารถเกบไดตงแตวนท 1 มกราคม ค.ศ. 1000 ไป จนถงประมาณป ค.ศ. 2037
TIME : สำาหรบเกบขอมลประเภทเวลา มคาไดตงแต -838:59:59 ไปจนถง 838:59:59 โดยจะแสดงผล ออกมาในรปแบบ HH:MM:SS YEAR[(2/4)] : สำาหรบเกบขอมลประเภทป ในรปแบบ YYYY หรอ YY แลวแตวาจะเลอก 2 หรอ 4 (หากไมระบ จะถอวาเปน 4 หลก) โดยหากเลอกเปน 4 หลก จะเกบคาไดตงแต ค.ศ. 1901 ถง 2155 แต หากเปน 2 หลก จะเกบตงแต ค.ศ. 1970 ถง 2069 ขอสงเกต คาทเกบในขอมลประเภท TIMESTAMP และ YEAR นนจะมความสามารถพอๆ กบ การเกบขอมลวนเดอนป
และเวลา ดวยฟลดชนด VARCHAR แตตางกนตรงท จะใชเนอทเกบขอมล นอยกวา... ทวา ฟลดประเภท TIMESTAMP นนจะมขอจำากดในเรองของเวลาทสามารถเกบได คอ จะตองอยในระหวาง 1
มกราคม ค.ศ. 1000 ไปจนถงแถวๆ ค.ศ. 2037 อยางทบอก แตหากเกบเปน VARCHAR นนจะไมตดขอจำากดน ฟลดชนด YEAR กเชนกนครบ... ใชเนอทแค 1 ไบตเทานนในการ เกบขอมล แตขอจำากดจะอยท ป ค.ศ. 1901 ถง 2155 เทานน (หรอ ค.ศ. 1970 ถง 2069 ในกรณ 2 หลก) แตหากเกบเปน VARCHAR จะไดตงแต 0000 ถง 9999 เลย อนนเลยอยทความจำาเปนมากกวาครบ (แต ดวยความทวา ปจจบนฮารดดสกราคาถกมากๆ ผมเลยไมตดใจอะไรทจะใช VARCHAR แทน เพอ ความสบายใจ ออ เพราะสมมตวากนเนอทตางกน 3 ไบต ตอ 1 ระเบยน มขอมล 4 ลานระเบยน กเพง ตางกน 12
ลานไบต หรอ 12 เมกะไบตเทานนเอง ซงหากเทยบกบปรมาณขอมลทงหมดของขอมล 4 ลานระเบยน ผมวามนตองมอยางนอยเปนกกะไบต ดงนนความแตกตางทไมกเมกะไบตจงไมมากมาย)
TINYBLOB : สำาหรบเกบขอมลประเภทไบนาร ไดแก ไฟลขอมลตางๆ, ไฟลรปภาพ, ไฟลมลตมเดย เปนตน คอไฟลอะไรกตามทอพโหลดผานฟอรมอพโหลดไฟลในภาษา HTML โดย TINYBLOB นน จะมเนอทใหเกบขอมลได 256 ไบต
BLOB : สำาหรบเกบขอมลประเภทไบนาร เชนเดยวกบ TINYBLOB แตสามารถเกบขอมลได 64KB
MEDIUMBLOB : สำาหรบเกบขอมลประเภทไบนาร เชนเดยวกบ TINYBLOB แตเกบขอมลได 16MB
LONGBLOB : สำาหรบเกบขอมลประเภทไบนาร เชนเดยวกบ TINYBLOB แตเกบขอมลได 4GB ขอสงเกต ขอมลประเภท BLOB นน แมจะมประโยชนในเรองของการเกบขอมลประเภท BINARY ใหอยกบตวฐานขอมล ทำาใหสะดวกเวลาสบคนกตาม แตมนกทำาใหฐานขอมลมขนาดใหญ เกนความจำาเปนดวย ทำาใหเกดความไมสะดวกในการสำารองฐานขอมลในกรณท มขอมลอพโหลดไป เกบมากๆ โดยปกตแลว จะใชวธการอพโหลดไปเกบไวในโฟลเดอร แลวเกบลงกไปยงไฟลเหลานน เปนฟลดชนด VARCHAR มากกวา
SET : สำาหรบเกบขอมลทเปนกลมของขอมลทยอมใหเลอกได 1 คาหรอหลายๆ คา ซงสามารถกำาหนด ไดถง 64 คา
คำ�สง SQL Command
Structured Query Language หรอ SQL คอคำาสงบรหารจดการฐานขอมล (Database) โดยเฉพาะ Relational
Database Management System (RDBMS) เชน Oracle, MySQL, Microsoft SQL Server, PostgreSQL, IBM DB2,
Microsoft Access ซงเราสามารถใช SQL command ในการสงการ หรอจดการขอมลภายในฐานขอมลเหลานได
Database SQL – Insert Query
รปแบบ (Syntax)
SQL Insert into statement ขอมลทตองระบคอ table name, column name, value
INSERT INTO TABLE_NAME (column1, column2, column3,...columnN)
VALUES (value1, value2, value3,...valueN);
ตวอยาง
INSERT INTO STUDENT VALUES ( ‘111’ , ’Micheal’ , ’Jackson’ , 60)
Database SQL – Select Query
หลงจากทเราทำาการ create database รวมถง create table และ นำาขอมล insert table กนไดเรยบรอยแลว ทนเราลองมาลองดงขอมลทอยในตาราง หรอ table กลบออกมาเพอใชตามเงอนไขทเราระบกน โดยคำาสงทใชคอ SQL Select statement ซงผลลพธทไดจะเรยกวา result set ทมลกษณะเปนขอมลตาราง หรอ table ทประกอบดวย column และ row
รปแบบ (Syntax)
SQL Select statement จำาเปนตองใชขอมล column name และ table name ในการระบชดของขอมลทจะแสดง
SELECT column1, column2, columnN
FROM table_name;
ตวอยาง
SELECT ID, NAME FROM STUDENT
หรอ
SELECT * FROM STUDENT
SQL Select statement เราสามารถนำาเอา Where condition เพมตอเขาไปไดเลย เพอใหขอมลทแสดงถกกรองใหเหลอเฉพาะขอมลทอยในเงอนไขทตองการ
SELECT column1, column2, columnN
FROM table_name
WHERE [condition]
ในสวนของ condition เราสามารถนำาเอา SQL Operator เชน =, >, <, LIKE, NOT มาสรางเปน SQL
Expression เพอเปรยบเทยบขอมลใน table และ ขอมลทเราตองการ
ตวอยาง
SELECT * FROM STUDENT WHERE ID = ‘111’