วันพุธที่ 17 ธันวาคม พ.ศ. 2557

ข้อสอบโอเน็ตวิชาคอมพิวเตอร์

1. นักเรียนจะเลือกใช้ซอฟต์แวร์ใดสร้างภาพ 3 มิติของชิ้นงานเพื่อนนำเสนอผลงานของตนเองในที่ประชุม
 1 Google Chrome
 2 Impress
 3 Adobe Illustrator
 4 Microsoft Access
 5 Pro/DESKTOP

เฉลย ข้อ 5. เพราะเป็นซอฟต์แวร์ที่สามารถสร้างชิ้นงานในรูปแบบ 3 มิติได้โดยไม่ต้องเสียค่าใช้จ่าย
ในการซื้อซอฟต์แวร์มาใช้งาน


2. หน่วยงาน A ใช้ระบบปฏิบัติการวนิโดวส์ บนเครือข่าย LAN
    หน่วยงาน B ใช้ระบบปฏิบัติการลินุกซ์ บนเครือข่าย WAN
    ถ้าสองหน่วยงานนี้ต้องการติดต่อสื่อสารส่งข้อมูลกันต้องใช้โพรโทคอลชนิดใด
 1 ใช้ TCP/IP และ POP3
 2 ใช้ FTP เหมือนกัน
 3 ใช้ TCP/IP เหมือนกัน
 4 ใช้ SMTP และ IrDA
 5 ใช้ FTP และ IrDA

เฉลย ข้อ 3. เพราะเครือข่ายคอมพิวเตอร์จะรับ-ส่งขอ้มูลกันได้ต้องใชโพรโทคอลชนิดเดียวกนั และ
TCP/IP ใช้ในการสื่อสารระหว่างคอมพิวเตอร์ที่ใช้ระบบปฏิบัติการแตกต่างกันและอยู่
บนเครือข่ายแตกต่างกัน

3. บุคคลในข้อใดไม่ใช้คอมพิวเตอร์ช่วยสร้างชิ้นงานหรือโครงงานอย่างมีจิตสำนึกและความรับผิดชอบ
 1 เอดาวน์โหลดซอฟต์แวร์สร้างหนังสืออิเล็กทรอนิกส์แบบทดลองใช้มาทำชิ้นงานส่งอาจารย ์
 2 บีทำสำเนาซอฟตแ์วร์เกมที่เขียนขึ้นเองไว้ 10 ชุด เพื่อเก็บไว้และแจกจ่ายคนรู้จัก
 3 ซีสร้างบทเรียนคอมพิวเตอร์ช่วยสอนเรื่องคำบาลีสันสกฤตมอบให้ห้องสมุดของโรงเรียน
 4 ดีพัฒนาซอฟแวร์ควบคุมการทำงานของไฟฟ้าในบ้านต่อยอดจากรุ่นพี่เพื่อส่งประกวดในงาน
 เปิดโลกเทคโนโลยี
 5 เอฟเปลี่ยนชื่อโครงงานและดัดแปลงโครงงานของเพื่อนมาเป็นโครงงานของตนเองเพื่อส่งอาจารย ์

เฉลย ข้อ 5. เพราะเป็นการทำซ้ำ ดัดแปลงผลงานของผู้อื่นโดยไม่ได้รับอนุญาต แสดงถึงการขาด
จิตสำนึกที่ดีและขาดความรับผิดชอบ

4. นักเรียนควรปฏิบัติตนตามข้อใดเมื่อเข้าใช้บริการในร้านอินเทอร์เน็ต 
 1 ส่งเสียงดังเมื่อเล่นเกมกับเพื่อนหลาย ๆ คนในร้านอินเทอร์เน็ต 
 2 แอบดูผูู้เล่นอินเทอร์เน็ตข้าง ๆ สนทนาผ่านเครือข่ายกับเพื่อน 
 3 สวมหูฟังแล้วใช้งานเงียบ ๆ จนหมดเวลาที่จ่ายค่าบริการ 
 4 สนทนาผ่านเครือข่ายกับคนรู้จักเกี่ยวกับเรื่องศาสนาและการเมือง 
 5 เปิดเว็บไซต์ที่เขียนวา่ “เว็บไซต์นี้อาจเป็นอันตรายต่อเครื่องคอมพิวเตอร์ของคุณ” 

เฉลย ข้อ3. เพราะเป็นการใช้งานคอมพิวเตอร์ที่ตนเองมีความสุข ไม่รบกวนผู้ใช้คนอื่นและปฏิบัติ
ตามกฎระเบียบของร้านอินเทอร์เน็ต

5. นิภาดาใช้สมาร์ทโฟนของตนเองส่งภาพและข้อความไปยังสมาร์ทโฟนของดารณี ทั้งสองคนนี้ใช ้
 โพรโทคอลชนิดใด 
 1 นิภาดาใช้ FTP, ดารณีใช้ TCP/IP 
 2 ใช้ HTTP เหมือนกัน 
 3 นิภาดาใช้ POP3, ดารณีใช้ SMTP 
 4 ใช้ IrDA เหมือนกัน
 5 ใช้ SMTP เหมือนกัน

เฉลย ข้อ4. เพราะ IrDA เป็นโพรโทคอลของเครือข่ายไร้สายที่นิยมใช้กับโทรศัพท์เคลื่อนที่และเมื่อ
ต้องการรับส่งข้อมูลกันต้องใหโ้พรโทคอลชนิดเดียวกัน

6. ถ้านักเรียนจะเลือกซื้อฮาร์ดดิสก์มาใช้สร้างและเก็บข้อมูลงานออกแบบสามมิติและการ์ตูนแอนิเมชัน 
 โดยเฉพาะ ควรพิจารณาจากสิ่งใดเป็นสำคัญ 
 1 ปีที่ผลิตฮาร์ดดิสก์
 2 ความเร็วและความจุของฮาร์ดดิสก์
 3 รูปทรง น้ำหนักและขนาดของฮาร์ดดิสก์
 4 เครื่องหมายการค้าของฮาร์ดดิสก์
 5 ชนิดของหัวเชื่อมต่อฮาร์ดดิสก์

เฉลย ข้อ2. เพราะการสร้างและเก็บข้อมูลภาพสามมิติและการ์ตูนแอนิเมชัน ต้องใช้ฮาร์ดดิสก์ที่มี
ความสามารถในการประมวลผลข้อมูลและเก็บข้อมูลได้ปริมาณมาก 

7. กลุ่มรักสุขภาพต้องการนำเสนอภาพเคลื่อนไหวแสดงการทำงานของระบบย่อยอาหารเมื่อรับประทาน 
 อาหารแต่ละประเภทแก่ผู้อยู่อาศัยในชุมชน เพื่อสร้างความเข้าใจและโน้มน้าวจิตใจให้คนในชุมชน 
 รับประทานอาหารที่ถนอมอวัยวะในระบบย่อยอาหารและเกิดประโยชน์ต่อร่างกายมากที่สุด กลุ่มรัก  สุขภาพทำโครงงานคอมพิวเตอร์ประเภทใด 
 1 การทดลองทฤษฎี
 2 การพัฒนาโปรแกรมประยุกต์ 
 3 การพัฒนาเครื่องมือ
 4 การพัฒนาสื่อเพื่อการศึกษา 
 5 การประยุกต์ใช้งาน 

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

8. นุชอาภาจะส่งภาพให้เพื่อนและแชทในเวลาเดียวกัน นุชอาภาต้องใช้บริการในข้อใด 
 1 FTP
 2 e-mail 
 3 gopher
 4 www 
 5 facebook 

เฉลย ข้อ5. เพราะ facebook เป็นเว็บไซต์ที่ให้บริการชุมชนออนไลน์ มีทั้งฝากภาพ ฝากข้อความ และ
แชทแบบประโยคต่อประโยคได้ในเวลาเดียวกัน

9. ในการนำเสนองานที่สร้างด้วยซอฟต์แวร์ไมโครซอฟต์เพาเวอร์พอยต์ เมื่อนำเสนอไปได้สักพักและ 
 ต้องการเลื่อนไปยังสไลด์แผ่นแรกควรปฏิบัติตามข้อใด 
 1 คลิกเมาส์ 
 2 กดปุ่ม Home 
 3 กดปุ่ม End 
 4 กดปุ่ม Print Screen 
 5 กดปุ่ม Shift+F10 

เฉลย ข้อ2. เพราะเมื่อกดปุ่ม Home ซึ่งหมายถึงหน้าแรก สไลด์จะปรากฏแผ่นแรกทันที 

10. ข้อใดเป็นการใชบริการอินเทอร์เน็ตอย่างมีมารยาท 
 1 ลบอีเมลที่อ่านแล้วออกเป็นประจา 
 2 ส่งภาพถ่ายขนาดใหญ่แนบอีเมลไปให้เพื่อนที่ไม่มีซอฟต์แวร์ดูภาพ 
 3 ใช้ชื่อผู้ใช้และรหัสผ่านของเพื่อนในการขายสินค้าออนไลน์ 
 4 สนทนาผ่านนเครือข่ายกับญาติผู้ใหญ่โดยใช้ภาษาวัยรุ่น 
 5 ส่งต่อจดหมายลูกโซ่ให้เพื่อนที่รู้จักผ่านเว็บไซต์ที่ให้บริการอีเมล

เฉลย ข้อ1. เพราะจะทำให้เมลบ็อกซ์ไม่เต็ม คนอื่นที่ส่งจดหมายมาสามารถส่งมาได้ตลอดโดย
ป้องกัน ปัญหาจดหมายถูกตีกลับ

ที่มา : http://pakornkrits.wordpress.com/tag/

วันอาทิตย์ที่ 23 พฤศจิกายน พ.ศ. 2557

ฟังก์ชันใน PHP

               ฟังก์ชันในโปรแกรมส่วนใหญ่ได้รับการเรียกคำสั่งเพื่อทำงานอย่างเดียว สิ่งนี้ทำให้คำสั่งอ่านได้ง่ายและยอมให้ใช้คำสั่งใหม่แต่ละครั้งเมื่อต้องการทำงานเดียวกัน

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

การกำหนดฟังก์ชันและการเรียกฟังก์ชัน

               การประกาศฟังก์ชันเริ่มต้นด้วยคีย์เวิร์ด function กำหนดชื่อฟังก์ชัน พารามิเตอร์ที่ต้องการ และเก็บคำสั่งที่จะประมวลผลแต่ละครั้งเมื่อเรียกฟังก์ชันนี้

<?php
function function_name(parameter1,…)
{
ชุดคำสั่ง …
}
?>
ชุดคำสั่งต้องเริ่มต้นและสิ้นสุดในวงเล็บปีกกา ({ }) ตัวอย่างฟังก์ชัน my_function
<?php
function my_function()
{
$mystring =<<<BODYSTRING
my function ได้รับการเรียก
BODYSTRING;
echo $mystring;
}
?>
               การประกาศฟังก์ชันนี้ เริ่มต้นด้วย function ดังนั้นผู้อ่านและตัวกระจาย PHP ทราบว่าต่อไปเป็นฟังก์ชันกำหนดเอง ชื่อฟังก์ชันคือ my_function การเรียกฟังก์ชันนี้ใช้ประโยคคำสั่งนี้
my_function ();
               การเรียกฟังก์ชันนี้จะให้ผลลัพธ์เป็นข้อความ "my function ได้รับการเรียก " บน browse

การตั้งชื่อฟังก์ชัน

               สิ่งสำคัญมากในการพิจารณาเมื่อตั้งชื่อฟังก์ชันคือชื่อต้องสั้นแต่มีความหมาย ถ้าฟังก์ชันสร้างส่วนตัวของเพจควรตั้งชื่อเป็น pageheader () หรือ page_header ()

ข้อจำกัดในการตั้งชื่อคือ
  • ฟังก์ชันไม่สามารถมีชื่อเดียวกับฟังก์ชันที่มีอยู่
  • ชื่อฟังก์ชันสามารถมีได้เพียงตัวอักษรตัวเลข และ underscore
  • ชื่อฟังก์ชันไม่สามารถเริ่มต้นด้วยตัวเลข
               หลายภาษายอมให้ใช้ชื่อฟังก์ชันได้อีก ส่วนการทำงานนี้เรียกว่า function overload อย่างไรก็ตาม PHP ไม่สนับสนุน function overload ดังนั้นฟังก์ชันไม่สามารถมีชื่อเดียวกันกับฟังก์ชันภายใน หรือฟังก์ชันกำหนดเองที่มีอยู่

หมายเหตุ ถึงแม้ว่าทุกสคริปต์ PHP รู้จักฟังก์ชันภายในทั้งหมด ฟังก์ชันกำหนดเองอยู่เฉพาะในสคริปต์ที่ประกาศสิ่งนี้หมายความว่า ชื่อฟังก์ชันสามารถใช้ในคนละไฟล์แต่อาจจะไปสู่ความสับสน และควรหลีกเลียง
ชื่อฟังก์ชันต่อไปนี้ถูกต้อง
name ()
name2 ()
name_three ()
_namefour ()
ชื่อไม่ถูกต้อง
5name ()
Name-six ()
fopen ()
               การเรียกฟังก์ชันไม่มีผลจากชนิดตัวพิมพ์ ดังนั้นการเรียก function_name (), Function_Name() หรือ FUNCTION_NAME() สามารถทำได้และมีผลลัพธ์เหมือนกัน แต่แบบแผนการกำหนดชื่อฟังก์ชันใน PHP ให้ใช้ตัวพิมพ์เล็ก
              ชื่อฟังก์ชันแตกต่างจากชื่อตัวแปร โดยชื่อตัวแปรเป็นชนิดตัวพิมพ์มีผล ดังนั้น $Name และ $name เป็น 2 ตัวแปร แต่ Name () และ name () เป็นฟังก์ชันเดียวกัน

การหยุดประมวลผลภายในฟังก์ชัน

               คีย์เวิร์ด return หยุดการประมวลผลฟังก์ชัน ฟังก์ชันสิ้นสุดได้เพราะประโยคคำสั่งทั้งหมดได้รับการประมวลผล หรือ ใช้คีย์เวิร์ด return การประมวลผลกลับไปยังประโยคคำสั่งต่อจากการเรียกฟังก์ชัน

<?php
function division($x, $y)
{
if ($y == 0 || !isset($y))
{
echo " ตัวหาร y ต้องไม่เป็นศูนย์หรือไม่มีค่า" ;
return;
}
$result = $x / $y;
echo $result;
}
?>
               ถ้าประโยคคำสั่ง return ได้รับการประมวลผล บรรทัดคำสั่งต่อไปในฟังก์ชันจะถูกข้ามไป และกลับไปยังผู้เรียกฟังก์ชันนี้ ในฟังก์ชันนี้ ถ้า y เป็น 0 จะหยุดการประมวลผล ถ้า y ไม่เท่ากับ 0 จะคำนวณผลหาร
สมมติป้อนค่าเป็น
x = 4, y = 0
x = 4
x = 4, y = 2
ผลลัพธ์ของคำสั่ง คือ
x = 4, y = 0 ผลลัพธ์ ตัวหาร y ต้องไม่เป็นศูนย์หรือไม่มีค่า
x = 4, y = ผลลัพธ์ ตัวหาร y ต้องไม่เป็นศูนย์หรือไม่มีค่า
x = 4, y = 2 ผลลัพธ์ 2

การเรียกฟังก์ชัน


               เมื่อฟังก์ชันได้รับการประกาศหรือสร้างขึ้นแล้ว การเรียกฟังก์ชันสามารถเรียกมาจากที่ใดๆ ภายในสคริปต์ หรือ จากไฟล์ที่มีการรวมด้วยประโยคคำสั่ง include() หรือ require()
               ตัวอย่าง ฟังก์ชัน show_message() เก็บอยู่ในไฟล์ fn_ 03 _keeper.php ส่วนผู้เรียกอยู่ในสคริปต์ fn_ 03 _caller.php

<?php
include("fn_ 03 _keeper.php");
show_message();
?>

พารามิเตอร์


               ตามปกติฟังก์ชันส่วนใหญ่ต้องการรับสารสนเทศจากผู้เรียกสำหรับการประมวลผล โดยทั่วไปเรียกว่า พารามิเตอร์

ไวยากรณ์พื้นฐาน

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

<?php
function show_parameter($param1, $param2, $param3)
{
echo <<<PARAM
รายการพารามิเตอร์ <br/>
param1: $param1 <br/>
param2: $param2 <br/>
param3: $param3 <br/>
PARAM;
}
?>
               พารามิเตอร์ที่ส่งไปยังฟังก์ชันแยกกันเครื่องหมายจุลภาคภายในวงเล็บ โดยสามารถส่งเป็นนิพจน์สำหรับแต่ละพารามิเตอร์ด้วย ตัวแปร ค่าคงที่ ผลลัพธ์จากการคำนวณ รวมถึงการเรียกฟังก์ชัน
scope ของพารามิเตอร์จำกัดภายในฟังก์ชัน ถ้าชื่อตัวแปรเหมือนกับตัวแปรใน scope ระดับอื่น พารามิเตอร์นี้ "ระบุ" เป็นตัวแปรภายในที่ไม่มีผลกับตัวแปรภายนอกฟังก์ชัน

การส่งผ่านโดยค่า(By Value)


               ตามปกติการส่งผ่านพารามิเตอร์ไปยังฟังก์ชันเป็นการส่งผ่านค่า การเปลี่ยนแปลงจะจำกัดภายในเฉพาะภายในฟังก์ชัน

ตัวอย่างฟังก์ชัน new_value () ที่ยอมให้เพิ่มค่า อาจจะเขียนคำสั่งดังนี้
<?php
function new_value($value, $increment= 1)
{
$value = $value + $increment;
}
$value = 10 ;
new_value($value);
echo "$value<br/>\n";
?>
               สั่งนี้ใช้ไม่ได้ ผลลัพธ์จะเป็น "10" ค่าใหม่ของ $value ไม่มีการเปลี่ยนแปลง สิ่งนี้เป็นเพราะกฎ scope คำสั่งนี้สร้างตัวแปรเรียกว่า $value เป็น 10 เมื่อเรียกฟังก์ชัน new_value () ตัวแปร $value ในฟังก์ชันได้รับการสร้างเมื่อเรียกฟังก์ชัน ค่า 1 ได้รับการเพิ่มให้กับตัวแปร ดังนั้นค่าของ $value คือ 11 ภายในฟังก์ชัน จนกระทั่งสิ้นสุดฟังก์ชัน แล้วกลับไปยังคำสั่งที่เรียกภายในคำสั่งนี้ ตัวแปร $value เป็นอีกตัวแปร global scope และไม่มีการเปลี่ยนแปลง

การส่งผ่านโดยการอ้างอิง (By Reference)


               ตามตัวอย่างฟังก์ชัน new_value ถ้าต้องการให้ฟังก์ชันเปลี่ยนแปลงค่าได้ มีวิธีหนึ่งในการแก้ไขคือ ประกาศ $value ในฟังก์ชันเป็น global แต่หมายความว่าในการใช้ฟังก์ชันนี้ ตัวแปรที่ต้องการเพิ่มค่าต้องตั้งชื่อเป็น $value แต่มีวิธีดีกว่าคือ ใช้การส่งผ่านโดยการอ้างอิง
               การอ้างอิงไปตัวแปรต้นทางแทนที่มีค่าของตัวเอง การปรับปรุงไปยังการอ้างอิงจะมีผลกับตัวแปรต้นทางด้วย
               การระบุพารามิเตอร์ที่ใช้การส่งผ่านโดยการอ้างอิงให้วาง ampersand (&) หน้าชื่อพารามิเตอร์ในข้อกำหนดฟังก์ชัน
               ตัวอย่าง new_value () ได้รับปรับปรุงให้มี 1 พารามิเตอร์ส่งผ่านโดยการอ้างอิงและทำงานได้อย่างถูกต้อง
<?php
function new_value(&$value, $increment=1)
{
$value = $value + $increment;
}
?>
              คำสั่งทดสอบฟังก์ชัน ให้พิมพ์ 10 ก่อนการเรียก increment () และ 11 ภายหลัง ในการส่งค่าโดยการอ้างอิงต้องส่งเป็นตัวแปรไม่สามารถกำหนดค่าคงที่โดยตรง

จำนวนตัวแปรของพารามิเตอร์


               การส่งผ่านพารามิเตอร์ไปยังฟังก์ชันนั้น การควบคุมของ PHP ได้กำหนดฟังก์ชันจำนวนหนึ่งให้ยอมรับจำนวนตัวแปรของพารามิเตอร์ ได้แก่ func_num_args, func_get_arg และ func_get_args
func_num_args() บอกจำนวนพารามิเตอร์ไปยังฟังก์ชันที่เรียก func_get_arg() แสดงค่าของพารามิเตอร์ตามดัชนี และ func_get_args() ส่งออก array ของพารามิเตอร์
<?php
function show_pass_value()
{
$idx = count(func_get_args());
echo " จำนวนพารามิเตอร์ $idx <br/>\n";
if ($idx > 0)
    echo ">> ใช้ฟังก์ชัน func_get_arg<br/>\n";
for ($i = 0 ; $i < $idx; $i++)
{
echo " พารามิเตอร์ที่ $i ค่า: ". func_get_arg($i)."<br/>\n";
}
if ($idx > 0)
    echo ">> ใช้ฟังก์ชัน func_get_args<br/>\n";
$params = func_get_args();
foreach ($params as $index => $val)
{
echo " พารามิเตอร์ที่ $index ค่า: $val<br/>\n";
}
echo " *********<br/>\n";
}
$x = 4 ;
show_pass_value("one", "two", 3 , $x, " ห้า" , " หก") ;
show_pass_value();
?>
ผลลัพธ์
จำนวนพารามิเตอร์ 6
>> ใช้ฟังก์ชัน func_get_arg
พารามิเตอร์ที่ 0 ค่า: one
พารามิเตอร์ที่ 1 ค่า: two
พารามิเตอร์ที่ 2 ค่า: 3
พารามิเตอร์ที่ 3 ค่า: 4
พารามิเตอร์ที่ 4 ค่า: ห้า
พารามิเตอร์ที่ 5 ค่า: หก
>> ใช้ฟังก์ชัน func_get_args
พารามิเตอร์ที่ 0 ค่า: one
พารามิเตอร์ที่ 1 ค่า: two
พารามิเตอร์ที่ 2 ค่า: 3
พารามิเตอร์ที่ 3 ค่า: 4
พารามิเตอร์ที่ 4 ค่า: ห้า
พารามิเตอร์ที่ 5 ค่า: หก
*********
จำนวนพารามิเตอร์ 0
*********

Scope


               เมื่อต้องการใช้ตัวแปรภายในไฟล์ที่รวม ต้องมีการประกาศตัวแปรเหล่านั้นก่อนประโยคคำสั่ง require () หรือ include () แต่เมื่อใช้ฟังก์ชันจะเป็นการส่งผ่านตัวแปรเชิงประจักษ์เหล่านั้นไปยังฟังก์ชัน บางส่วนเป็นเพราะไม่มีกลไกส่งผ่านตัวแปรเชิงประจักษ์ไปยังไฟล์ที่รวม และบางส่วนเป็นเพราะ scope ของตัวแปรของฟังก์ชันแตกต่างกัน
               การควบคุม scope ของตัวแปรเป็นการทำให้ตัวแปรมองเห็นได้ ใน PHP มีกฎตั้งค่า scope ดังนี้
  • การประกาศตัวแปรภายในฟังก์ชันอยู่ใน scope จากประโยคคำสั่งซึ่งตัวแปรให้รับการประกาศภายในวงเล็บปีกกา สิ่งนี้เรียกว่า function scope ตัวแปรเรียกว่า local variable
  • การประกาศตัวแปรภายนอกฟังก์ชันอยู่ใน scope จากประโยคคำสั่งซึ่งตัวแปรได้รับการประกาศที่สิ้นสุดแต่ไม่ใช้ภายในฟังก์ชัน สิ่งนี้เรียกว่า global scope ตัวแปรเรียกว่า global variable
  • การใช้ประโยคคำสั่ง require () และ include () ไม่มีผลกับ scope ถ้าประโยคคำสั่งได้รับการใช้ภายในฟังก์ชัน ประยุกต์ด้วย function scope ถ้าไม่ได้อยู่ภายในฟังก์ชัน ประยุกต์ด้วย global scope
  • คีย์เวิร์ด global สามารถระบุได้เองเพื่อกำหนดหรือใช้ตัวแปรภายในฟังก์ชันให้มี scope เป็น global
  • ตัวแปร สามารถลบโดยการเรียก unset ($variable_name) และตัวแปรที่ unset จะไม่มี scope
  • ตัวแปรระดับ superglobal สามารถเข้าถึงได้ทุกส่วนในสคริปต์

ตัวแปรระดับฟังก์ชัน


               ตัวแปรระดับฟังก์ชันหรือ local variable เป็นการประกาศเพื่อใช้เฉพาะภายในฟังก์ชัน ไม่สามารถเรียกจากภายนอกฟังก์ชันได้
<?php
$newline = <<<NLSTRING
<br/>\n
NLSTRING;
$var_global = 10 ;
function show_value()
{
global $newline;
$var_local= 75 ;
echo "\$var_local 1: $var_local";
echo $newline;
}
show_value();
echo "\$var_global : $var_global";
echo $newline;
echo "\$var_local 2: $var_local";
echo $newline;
?>
ผลลัพธ์
$var_global 1 :
$var_local 1: 75
$var_global 2: 10
$var_local 2:
ตามตัวอย่างนี้ ตัวแปรระดับฟังก์ชัน $var_local ไม่สามารถแสดงผลในการพิมพ์ภายนอกฟังก์ชัน show_value() และ $var_global ที่เป็นตัวแปรระดับ global ไม่สามารถแสดงผลภายใน show_value() เพราะมี scope ต่างกัน


ตัวแปรระดับ global

                ถ้าต้องการนำตัวแปรระดับ global มาใช้ภายในฟังก์ชันต้องประกาศด้วยคีย์เวิร์ด global ก่อนประโยคคำสั่งที่ใช้ตัวแปรนั้น ตัวอย่าง ฟังก์ชัน show_value() ใช้ $newline จากภายนอกฟังก์ชัน
global $newline;

ตัวแปรสถิตย์


               การประกาศตัวแปรสถิตย์ใช้ คีย์เวิร์ด static เมื่อมีการเรียกใช้ฟังก์ชัน โปรแกรมจะกำหนดค่าตัวแปรตามที่ระบุเพียงครั้งเดียว ถ้าเรียกซ้ำอย่างต่อเนื่องค่านี้จะเปลี่ยนแปลงตามการคำนวณ
<?php
function increment()
{
static $increase = 5 ;
$increase++;
echo $increase."<br/>\n";
}
$end = 5 ;
for ($i = 1 ; $i < $end; $i++)
    increment();
?>
ผลลัพธ์
6
7
8
9
ค่าของตัวแปรสถิตย์ได้รับการตั้งทุกครั้งเมื่อเรียกใช้ในครั้งต่อไป

การส่งออกค่าจากฟังก์ชัน


                 การส่งค่าออกจากฟังก์ชันใช้คีย์เวิร์ด return เช่นเดียวกับการออกจากฟังก์ชันได้ ถ้าไม่มีการระบุส่งออกฟังก์ชันจะส่งค่า NULL
ตัวอย่าง ฟังก์ชัน get_larger () สาธิตการส่งออกค่า
<?
function get_larger($x=NULL, $y=NULL)
{
if (!isset($x) || !isset($y))
    return " ไม่มีการส่งค่า" ;
if ($x > $y)
    return $x;
else if ($x < $y)
    return $y;
else
    return " ค่าเท่ากัน" ;
}
$sends = array();
$sends[0] = array('x' =>5);
$sends[1] = array('x' =>9, 'y'=>3);
$sends[2] = array('x' =>5, 'y'=>8);
$sends[3] = array('x' =>4, 'y'=>4);
foreach ($sends as $send)
{
echo "x = ".$send['x']." y = ".$send['y']." : ค่า - > "
.get_larger($send['x'], $send['y']);
echo "<br/>\n";
}
?>
ผลลัพธ์
x = 5 y = : ค่า - > ไม่มีการส่งค่า
x = 9 y = 3 : ค่า - > 9
x = 5 y = 8 : ค่า - > 8
x = 4 y = 4 : ค่า - > ค่าเท่ากัน
            ฟังก์ชันที่ทำงานอาจเดียว แต่ไม่จำเป็นต้องส่งออกค่า มักจะส่งออก TRUE หรือ FALSE เพื่อระบุความสำเร็จหรือล้มเหลว ค่า TRUE หรือ FALSE สามารถได้รับการแสดงแทนด้วย 1 หรือ 0

Recursion

           recursion ได้รับการสนับสนุนใน PHP ฟังก์ชันชนิดนี้เป็นการเรียกตัวเองและเป็นประโยชน์กับการบังคับโครงสร้างข้อมูลไดนามิคส์ เช่น รายการเชื่อมโยงและโครงสร้างต้นไม้ (tree)

              โปรแกรมประยุกต์เว็บจำนวนไม่มากต้องการโครงสร้างข้อมูลซับซ้อนมากและจำกัดการใช้ เนื่องจาก recursion ช้ากว่าและใช้หน่วยความจำมากกว่าการทำงานวนรอบ ดังนั้นควรเลือกการทำงานแบบวนรอบปกติ ถ้าเป็นไปได้
ตัวอย่างการประยุกต์แบบย้อนกลับตัวอักษร
<?php
function word_reverse_r($str)
{
if (strlen($str)>0)
    word_reverse_r(substr($str, 1));
echo substr($str, 0, 1);
return;
}
function word_reverse_i($str)
{
for ($i=1; $i<=strlen($str); $i++)
{
echo substr($str, -$i, 1);
}
return;
}
?>
                  รายการคำสั่งของ 2 ฟังก์ชันนี้จะพิมพ์ข้อความย้อนกลับ ฟังก์ชัน word_reverse_r เป็น recursion ฟังก์ชัน word_reverse_i เป็นการวนรอบ
                  ฟังก์ชัน word_reverse_r ใช้ข้อความเป็นพารามิเตอร์ เมื่อมีการเรียกฟังก์ชันนี้ จะเกิดการเรียกตัวเองแต่ละครั้งส่งผ่านตัวอักษรที่ 2 ไปถึงตัวอักษรสุดท้าย
                  การเรียกฟังก์ชันแต่ละครั้งจะทำสำเนาใหม่ของคำสั่งในหน่วยความจำของแม่ข่าย แต่ด้วยพารามิเตอร์ต่างกัน ดังนั้นจึงเหมือนกับการเรียกคนละฟังก์ชัน

วันพฤหัสบดีที่ 6 พฤศจิกายน พ.ศ. 2557

ชนิดของฟิลด์

DATETIME : เป็นฟิลด์ชนิดที่เหมาะสมกับการเก็บข้อมูลวันที่ และเวลา สมดังชื่อของมันนั่นแหละครับ โดยจะเก็บได้ตั้งแต่ 1 มกราคม ค.ศ. 1000 เวลา 00:00:00 ไปจนถึง 31 ธันวาคม ค.ศ. 9999 เวลา 23:59:59 ครับ โดยรูปแบบการแสดงผล เวลาที่ทำการสืบค้น (query) ออกมา จะเป็น YYYY-MM-DD HH:MM:SS ครับ

TIMESTAMP[(M)] : เอาไว้เก็บเวลาเช่นกันครับ แต่จะเก็บในรูปแบบของ YYYYMMDDHHMMSS หรือ YYMMDDHHMMSS หรือ YYYYMMDD หรือ YYMMDD แล้วแต่ว่าเราจะระบุค่า M เป็น 14, 12, 8 หรือ 6 ตามลำดับ โดยความเห็นส่วนตัวของผมแล้ว การเก็บค่า วันเดือนปี และเวลา ในรูปแบบนี้มันเอาไปใช้งานสะดวกดีไม่หยอก (ผมชอบเก็บในรูปแบบ YYYYMMDDHHMMSS และ YYYYMMDD มากทีเดียว)... เราสามารถเก็บได้ตั้งแต่วันที่ 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 นิดหน่อยครับ นั่นก็คือ

ค่าที่เก็บในฟิลด์ชนิด TIMESTAMP นั้นจะมีความสามารถพอๆ กับ การเก็บข้อมูลวันเดือนปี และเวลา ด้วยฟิลด์ชนิด VARCHAR แต่ต่างกันตรงที่ จะใช้เนื้อที่เก็บข้อมูลน้อยกว่า... ทว่า ฟิลด์ประเภท TIMESTAMP นั้นจะมีข้อจำกัดในเรื่องของเวลาที่สามารถเก็บได้ คือจะต้องอยู่ในระหว่าง 1 มกราคม ค.ศ. 1000 ไปจนถึงแถวๆ ค.ศ. 2037 อย่างที่บอก แต่หากเก็บเป็น VARCHAR นั้นจะไม่ติดข้อจำกัดนี้ฟิลด์ชนิด YEAR ก็เช่นกันครับ... ใช้เนื้อที่แค่ 1 ไบต์เท่านั้นในการเก็บข้อมูล แต่ข้อจำกัดจะอยู่ที่ ปี ค.ศ. 1901 ถึง 2155 เท่านั้น (หรือ ค.ศ. 1970 ถึง 2069 ในกรณี 2 หลัก) แต่หากเก็บเป็น VARCHAR จะได้ตั้งแต่ 0000 ถึง 9999 เลย อันนี้เลยอยู่ที่ความจำเป็นมากกว่าครับ (แต่ด้วยความที่ว่า ปัจจุบันฮาร์ดดิสก์ราคาถูกมากๆ ผมเลยไม่ติดใจอะไรที่จะใช้ VARCHAR แทน เพื่อความสบายใจ อิอิ เพราะสมมติว่ากินเนื้อที่ต่างกัน 3 ไบต์ ต่อ 1 ระเบียน มีข้อมูล 4 ล้านระเบียน ก็เพิ่งต่างกัน 12 ล้านไบต์ หรือ 12 เมกะไบต์เท่านั้นเอง ซึ่งหากเทียบกับปริมาณข้อมูลทั้งหมดของข้อมูล 4 ล้านระเบียน ผมว่ามันต้องมีอย่างน้อยเป็นกิกะไบต์ ดังนั้นความแตกต่างที่ไม่กี่เมกะไบต์จึงไม่มากมายอะไรครับ)

CHAR : เป็นข้อมูลประเภท string แบบที่ถูกจำกัดความกว้างเอาไว้คือ 255 ตัวอักษร ไม่สามารถปรับเปลี่ยนได้เหมือนกับ VARCHAR ครับ หากเราทำการสืบค้นโดยเรียงตามลำดับ มันก็จะเรียงข้อมูลแบบ case-sensitive คือ คำนึงถึงตัวอักษรเล็ก และใหญ่ เว้นเสียแต่เราจะกำหนดแอตทริบิวต์เป็น BINARY ที่จะทำให้การเรียงข้อมูลเป็นแบบ non case-sensitive ครับ คือ ตัวอักษรใหญ่ และเล็ก มีค่าเท่ากัน

TINYBLOB : ฟิลด์ชนิด BLOB นั้นจะมีไว้เพื่อเก็บข้อมูลประเภทไบนารี พูดง่ายๆ คือพวก ไฟล์ข้อมูลต่างๆ, ไฟล์รูปภาพ, ไฟล์มัลติมีเดีย เป็นต้น คือไฟล์อะไรก็ตามที่อัพโหลดผ่านฟอร์มอัพโหลดไฟล์ในภาษา HTML ประมาณนั้น (จะกล่าวถึงภายหลังแน่นอน ตอนที่จะลองประยุกต์พัฒนาเว็บแอปพลิเคชันสักตัว) โดย TINYBLOB นั้นจะมีเนื้อที่ให้เก็บข้อมูลได้ 256 ไบต์ ครับ

TINYTEXT : ในกรณีที่ข้อความยาวๆ หรือต้องการที่จะค้นหาข้อความ โดยอาศัยฟีเจอร์ FULL TEXT SEARCH ของ MySQL (จะกล่าวถึงในตอนประยุกต์การพัฒนาเว็บบอร์ด) เราอาจจะเลือกที่จะไม่เก็บข้อมูลลงในฟิลด์ประเภท VARCHAR ที่มีข้อจำกัดแค่ 256 ตัวอักษร แต่เราจะเก็บลงฟิลด์ประเภท TEXT แทน (ต้องขออภัยที่ผมลืมอธิบายส่วนนี้ ตอนที่พูดถึง TEXT)... TINYTEXT นี้ จะให้เราเก็บข้อมูลได้ 256 ตัวอักษร ครับ ซึ่งมองเผินๆ ก็ไม่ต่างกับเก็บลงฟิลด์ประเภท CHAR หรือ VARCHAR(255) เลย แต่จริงๆ มันต่างกันตรงที่ มันทำ FULL TEXT SEARCH ได้ไงครับ

BLOB : เหมือน TINYBLOB ครับ แต่สามารถเก็บข้อมูลได้ 64KB

MEDIUMBLOB : เหมือน TINYBLOB เช่นกัน แต่เก็บข้อมูลได้ 16MB ครับ

MEDIUMTEXT : เหมือน TEXT ครับ แต่เก็บข้อมูลได้ 16,777,215 ตัวอักษร ครับ

LONGBLOB : เหมือน TINYBLOB เช่นกัน แต่เก็บข้อมูลได้ 4GB ครับ

LONGTEXT : เหมือน TEXT ครับ แต่เก็บข้อมูลได้ 4,294,967,295 ตัวอักษร ครับ

ข้อสังเกต
ฟิลด์ประเภท BLOB นั้น แม้จะมีประโยชน์ในเรื่องของการเก็บข้อมูลประเภท BINARY ให้อยู่กับตัวฐานข้อมูล ทำให้สะดวกเวลาสืบค้นก็ตาม แต่มันก็ทำให้ฐานข้อมูลบวมเกินความจำเป็นด้วยครับ ทำให้เกิดความไม่สะดวกในการสำรองฐานข้อมูลในกรณีที่ มีข้อมูลอัพโหลดไปเก็บมากๆ โดยปกติแล้ว เราจะใช้วิธีการอัพโหลดไปเก็บไว้ในโฟลเดอร์ แล้วเก็บลิงก์ไปยังไฟล์เหล่านั้น เป็นฟิลด์ชนิด VARCHAR มากกว่า ครับ

SMALLINT : เป็นฟิลด์สำหรับเก็บข้อมูลชนิดตัวเลขที่มีขนาดใหญ่ขึ้นมาอีกหน่อยครับ คือ 16 บิต จึงสามารถเก็บค่าได้ตั้งแต่ -32768 ถึง 32767 (ในกรณีแบบคิดเครื่องหมาย) หรือ 0 ถึง 65535 (ในกรณี UNSIGNED หรือไม่คิดเครื่องหมาย) แน่นอนครับ สามารถเลือก Attribute เป็น UNSIGNED และ UNSIGNED ZEROFILL ได้เช่นเดียวกับ TINYINT

MEDIUMINT : เช่นเดียวกับ SMALLINT ครับ แต่จะมีขนาดใหญ่ขึ้นมาอีก ก็คือ 24 บิต ครับ นั่นก็หมายความว่าสามารถเก็บข้อมูลตัวเลขได้ตั้งแต่ -8388608 ไปจนถึง 8388607 (ในกรณีแบบคิดเครื่องหมาย) หรือ 0 ถึง 16777215 (ในกรณีที่เป็น UNSIGNED หรือไม่คิดเครื่องหมาย) แน่นอนครับ สามารถเลือก Attribute เป็น UNSIGNED และ UNSIGNED ZEROFILL ได้เช่นเดียวกับ TINYINT

INT : เช่นเดียวกับ SMALLINT เช่นกัน แต่งานนี้จะเป็นขนาดปกติคือ 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)] : ในกรณีที่ต้องการเก็บเลขทศนิยมในระดับที่ละเอียดแบบสุดๆ ไปเลย ก็ต้องเลือกชนิดนี้ครับ เพราะจะเก็บข้อมูลแบบ 64 บิต  สามารถเก็บได้ตั้งแต่ -1.7976931348623157E+308 ถึง -2.2250738585072014E-308, 0 และ 2.2250738585072014E-308 ถึง 1.7976931348623157E+308 (แต่ก็อีกนั่นแหละ ผมไม่เคยเจอใครต้องเก็บอะไรละเอียดขนาดนี้อ่ะนะ)

DECIMAL[(M,D)] : อันนี้ต้องสารภาพตามตรงว่าอ่านจากข้อมูลที่หามาได้ แล้วก็งงครับ คือเขาบอกว่า เป็นข้อมูลชนิดตัวเลขแบบ unpacked คือ อนุญาตให้สามารถเก็บข้อมูลตัวอักษรเข้าไปได้ด้วย แต่จากการที่ผมลองใช้งานดู มันก็ไม่แตกต่างอะไรไปจาก ฟิลด์ชนิด DOUBLE เลย สามารถเก็บข้อมูลได้เท่ากัน และมีการใช้งานที่เหมือนกัน... ผมลองกรอกข้อมูลแบบเป็นตัวเลขปนตัวอักษรไป มันก็ไม่นับตัวอักษร และตัวเลขใดๆ ที่อยู่ตามหลังตัวอักษรครับ

มีข้อสังเกตนิดนึง เกี่ยวกับข้อมูลชนิด FLOAT, DOUBLE และ DECIMAL ก็คือ เวลากำหนดความยาวของข้อมูลในฟิลด์ เราจะกำหนดในรูปแบบ (M,D) ซึ่งหมายความว่า เราต้องระบุด้วยว่า จะให้มีตัวเลขส่วนที่เป็นจำนวนเต็มกี่หลัก และมีเลขทศนิยมกี่หลักครับ... เช่น ถ้าเรากำหนดว่า FLOAT(5,2) จะหมายความว่า เราจะเก็บข้อมูลเป็นตัวเลขจำนวนเต็ม 5 หลัก และทศนิยม 2 หลัก... ดังนั้นหากเราใส่ข้อมูล 12345.6789 เข้าไป สิ่งที่จะเข้าไปอยู่ในข้อมูลจริงๆ ก็คือ 12345.68 ครับ (ปัดเศษให้มีจำนวนหลักตามที่เรากำหนด)

VARCHAR : เอาไว้เก็บข้อมูลประเภทตัวอักษรครับ ทุกครั้งที่เลือกชนิดของฟิลด์เป็นประเภทนี้ จะต้องมีการกำหนดความยาวของข้อมูลลงไปด้วย ซึ่งสามารถกำหนดได้ตั้งแต่ 1 - 255 ครับ... ฟิลด์ชนิดนี้ เหมาะสำหรับการเก็บข้อมูลสั้นๆ เช่น ชื่อ นามสกุล หรือหัวข้อต่างๆ เป็นต้น... ในส่วนฟิลด์ประเภทนี้ จะสามารถเลือก "แอตทริบิวต์" เป็น BINARY ได้ครับ... ปกติแล้วการจัดเรียงข้อมูลเวลาสืบค้น (query) สำหรับ VARCHAR จะเป็นแบบ case-sensitive (ตัวอักษรใหญ่ และเล็กมีความหมายแตกต่างกัน) แต่หากระบุ "แอตทริบิวต์" เป็น BINARY ปุ๊บ การสืบค้นจะไม่คำนึงตัวอักษรว่าจะเป็นตัวใหญ่ หรือตัวเล็กละครับ

TINYINT : ข้อมูลประเภทตัวเลขครับ แต่มีขนาดสูงสุดได้แค่ 8 บิต... ข้อมูลประเภทนี้เราสามารถกำหนดเพิ่มเติมในส่วนของ "แอตทริบิวต์" ได้ว่าจะเลือกเป็น UNSIGNED หรือ UNSIGNED ZEROFILL โดยจะมีความแตกต่างดังนี้

UNSIGNED : จะหมายถึงเก็บค่าตัวเลขแบบไม่มีเครื่องหมาย หรือพูดง่ายๆ คือ ไม่เก็บค่าลบเด็ดขาดนั่นเอง... แบบนี้จะทำให้สามารถเก็บค่าได้ตั้งแต่ 0 - 255 ครับUNSIGNED ZEROFILL : เหมือนข้างต้นครับ แต่ว่าหากข้อมูลที่กรอกเข้ามาไม่ครบตามจำนวนหลักที่เรากำหนด ตัว MySQL จะทำการเติม 0 ให้ครบหลักเองครับ... เช่นเรากำหนดให้ใส่ได้ 3 หลัก แล้วเราเก็บข้อมูล 25 เข้าไป เวลาเราสืบค้นดู เราจะได้ค่าออกมาเป็น 025 ครับ

หากเราไม่เลือก "แอตทริบิวต์" สิ่งที่เราจะได้ก็คือ SIGNED ครับ นั่นก็คือต้องเสียบิตนึงไปเก็บเครื่องหมาย บวก/ลบ ทำให้สามารถเก็บข้อมูลได้อยู่ในช่วง -128 ถึง 127 เท่านั้น

TEXT : เอาไว้เก็บข้อมูลประเภทตัวอักษร แต่สามารถเก็บได้มากขึ้นครับ โดยสูงสุดคือ 65,535 ตัวอักษร หรือ 64KB นั่นเอง... เหมาะสำหรับเก็บข้อมูลพวกเนื้อหาต่างๆ ที่ยาวๆ ครับ...

DATE : เอาไว้เก็บข้อมูลประเภทวันที่ โดยเก็บได้จาก 1 มกราคม ค.ศ. 1000 ถึง 31 ธันวาคม ค.ศ. 9999 โดยจะแสดงผลในรูปแบบ YYYY-MM-DD  ครับ

วันพุธที่ 5 พฤศจิกายน พ.ศ. 2557

ทำความรู้จักกับ phpMyAdmin

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

ทีนี้มารู้จักส่วนประกอบของ phpMyAdmin กัน ในที่นี้ได้แบ่งเป็นเมนูไว้ให้ค่ะ เพื่อความสะดวก
เมนูรวม


หน้าแรกของโปรแกรม phpMyAdmin 1. ปุ่ม Home หรือหน้าแรก
ใส่คำสั่ง SQL เพื่อรันฐานข้อมูล 2. ปุ่ม Query Windows ไว้สำหรับใส่คำสั่ง SQL เพื่อรันฐานข้อมูล
เมนู phpMyAdmin อ้างอิงเกี่ยวกับโปรแกรม 3. ปุ่ม phpMyAdmin  เอกสารข้อมูลที่เกี่ยวกับ phpMyAdmin
เมนู Documentation เกี่ยวกับ MySQL 4. ปุ่ม Documentation เอกสารข้อมูลอ้างอิงที่เกี่ยวกับ MySQL
ปุ่ม Reload ทำซ้ำหน้าจอ 5. ปุ่ม Reload ใช้ในการแสดงหน้าจอนั้นๆ อีกครั้ง

จากนั้นมารู้จักกับเมนูด้านบนของโปรแกรม phpMyAdmin ทั้ง Database , SQL, Status, .....

6. เริ่มด้วยเมนู Databases กันก่อน เป็นเมนูที่แสดงรายการฐานข้อมูลทั้งหมด สามารถสร้างและลบฐานข้อมูลได้ในหน้านี้
เมนู Database แสดงรายการฐานข้อมูล

7. เมนู SQL  ใช้รันคำสั่ง SQL ในฐานข้อมูลชุดนั้นๆ
เมนู SQL  ใช้รันคำสั่ง SQL

8. เมนู Status  จะแสดงสถานะของ MySQL แสดงวันที่เข้าใช้งานและช่วงเวลาทั้งหมด
เมนู Status  จะแสดงสถานะของ MySQL

9. เมนู Users แสดงรายชื่อผู้ใช้งานฐานข้อมูลทั้งหมด
เมนู users แสดงuser

10. เมนู Export ใช้ในการส่งออกฐานข้อมูล
เมนู Export ใช้ในการส่งออกฐานข้อมูล

11. เมนู Import ใช้ในการนำเข้าฐานข้อมูล
เมนู Import ใช้ในการนำเข้าฐานข้อมูล

12. เมนู Setting ใช้ตั้งค่าฐานข้อมูล MySQL
เมนู Setting ใช้ตั้งค่าฐานข้อมูล MySQL

13. เมนู Synchronize  การผสานฐานข้อมูลระหว่าง 2 ฐานข้อมูล
เมนู Synchronize  การผสานฐานข้อมู


เมนู Replication ทำซ้ำ

15. ด้านซ้ายของโปรแกรมคือชื่อฐานข้อมูลทั้งหมด
รายการฐานข้อมูล

ขั้นตอน วิธีการสร้าางฐานข้อมูลใน phpMyAdmin

ขั้นตอน วิธีการสร้าางฐานข้อมูลใน phpMyAdmin 
เลือกแท็บ เมนู Database
1.เข้าสู่หน้า phpMyAdmin  เลือกแท็บเมนู Databases
พิมพ์ชื่อฐานข้อมูล
2.พิมพ์ชื่อ Database ที่ต้องการในส่วนของ Create Database แล้วคลิ๊ก Create
database...has been created
3.เมื่อคลิ๊ก Create แล้ว จะขึ้นหน้าต่างสีเขียว "Database (ตามด้วยชื่อฐานข้อมูลที่เราสร้าง) has been Created" 
แสดงชื่อฐานข้อมูลที่สร้าง
4.ในหน้าเมนู Database จะเห็นชื่อ Database ที่เราสร้างขึ้นมา  เป็นการเสร็จสิ้นการสร้าง Database

ขั้นตอน วิธีการสร้างตาราง (Create Table) ในฐานข้อมูล Mysql

ขั้นตอน วิธีการสร้างตาราง (Create Table) ในฐานข้อมูล Mysql
แท็บเมนู Database
1.เข้ามาในหน้า  phpMyAdmin  เลือกแท็บเมนู Database
เลือก Database ชื่อ test 1
2.เลือก  Database ที่ต้องการ ในที่นี้เลือ Database ที่ชื่อ Test1
สร้างตาราง id_test1
3.ในส่วนของ Create Table
Name : ชื่อตาราง
Number of Columns : จำนวนคอลัมน์ (ฟิลด์)
แล้วคลิ๊ก Go
รายละเอียดฟิลด์
4.โปรแกรมจะขึ้นหน้าต่างมาให้ใส่รายละเอียดของ Fields
Name : ชื่อฟิลด์
Type : ประเภทของข้อมูล
Length/Values : จำนวนค่าสูงสุดของแต่ละฟิลด์
Default : ค่าเริ่มเต้น
Collation : รหัสอักขระ
Attributes : คุณสมบัติ
Null : ว่าง
Index : คุณสมบัติของฟิลด์ (Primary Key)
Comments : การแสดงรายละเอียดของฟิลด์
แล้วคลิ๊ก Save บันทึกข้อมูล
ตาราง
5.จะเห็นชื่อตารางที่เราสร้างขึ้นมา

วิธีการเพิ่มฟิลด์ (Field) ในตาราง ของ ฐานข้อมูล Mysql ด้วย phpMyadmin

วิธีการเพิ่มฟิลด์ (Field) ในตาราง ของ ฐานข้อมูล Mysql ด้วย phpMyadmin 
เลือกเเท็บเมนู Databases
1.เข้ามาในหน้า phpMyAdmin  เลือกแท็บเมนู  Database
Database test1
2.เลือกชื่อ Databases  ในที่นี้ใช้ Databases ชื่อ test1
เลือกตาราง
3.ให้เลือก ตาราง  ที่ต้องการเพิ่มฟิลด์
เพิ่มฟิลด์
4.ด้านล่างจะมีให้ Add แล้วใส่จำนวนฟิลด์ที่ต้องการเพิ่มลงไป สามารถเลือกตำแหน่งของฟิลด์นั้นได้
- At Beginning of Table : จุดเริ่มต้นของตาราง
- At End of Table : จุดสุดท้ายของตาราง
- At (ตามด้วยชื่อฟิลด์)
แล้วคลิ๊ก Go
บันทึกฟิลด์
5.จะมีหน้าต่างให้ใส่รายละเอียดของฟิลด์ที่จะเพิ่มลงไป แล้วคลิ๊ก Save
เพิ่มฟิลด์สำเร็จ
6.เมื่อเพิ่มฟิลด์เสร็จสิ้นจะมีหน้าต่างขึ้นมาว่า Table (ชื่อตาราง) has been altered successfully

วิธีการป้อนข้อมูลของฟิลด์ Field ในตาราง Table บนฐานข้อมูล MySQL

วิธีการป้อนข้อมูลของฟิลด์ Field ในตาราง Table บนฐานข้อมูล MySQL
เข้าหน้า phpMyAdmin แล้วเลือกแท็บเมนู Databases
1.เข้าหน้า phpMyAdmin  แล้วเลือกแท็บเมนู  Database
จากนั้นให้เลือก Database ที่ต้องการ ในที่นี้เลือก
2.จากนั้นให้เลือก Database ที่ต้องการ ในที่นี้เลือก Database ที่ชื่อ test1
ะพบกับตาราง Table ในฐานข้อมูล ให้เลือกตาราง Table ที่ต้องการเพิ่มข้อมูล แล้วคลิ๊ก Insert
3.จะพบกับตาราง Table ในฐานข้อมูล ให้เลือกตาราง Table ที่ต้องการเพิ่มข้อมูล แล้วคลิ๊ก Insert
จะขึ้นหน้าต่างให้เพิ่มข้อมูลลงไปให้ใส่รายละเอียดของข้อมูลในช่อง Value แล้วคลิ๊ก Go
4.จะขึ้นหน้าต่างให้เพิ่มข้อมูลลงไปให้ใส่รายละเอียดของข้อมูลในช่อง Value แล้วคลิ๊ก Go 
จะเห็นว่า ข้อมูลที่เราเพิ่มเข้าไปสำเร็จเรียบร้อยแล้ว
5.จะเห็นว่า ข้อมูลที่เราเพิ่มเข้าไปสำเร็จเรียบร้อยแล้ว

ขั้นตอน วิธีการลบฟิลด์ Field ในตาราง ฐานข้อมูล MySQL

ขั้นตอน วิธีการลบฟิลด์ Field ในตาราง ฐานข้อมูล MySQL
เข้ามาในหน้า phpMyAdmin แล้วเลือกแท็บเมนู Databases
1.เข้ามาในหน้า phpMyAdmin  แล้วเลือกแท็บเมนู Database
เเล้วเลือก Databases ที่ต้องการ
2.เเล้วเลือก Databases ที่ต้องการ ในที่นี้เลือก Databases ชื่อ test1
เลือกตาราง Table ที่ต้องการลบ Field
3.เลือกตาราง Table  Table ที่ต้องการลบ Field ในที่นี้เลือกตารางที่ชื่อว่า Login
เลือกแท็บเมนู Structure
4.เลือกแท็บเมนู Structure
สามารถลบฟิลด์ที่ต้องการได้โดยคลิ๊กที่ปุ่ม Drop แต่จะสามารถลบได้ทีละรายการเท่านั้น
5.สามารถลบฟิลด์ที่ต้องการได้โดยคลิ๊กที่ปุ่ม Drop แต่จะสามารถลบได้ทีละรายการเท่านั้น
หากต้องการลบหลายๆ ฟิลด์สามารถเลือก Checkbox หน้ารายการที่ต้องการ แล้วคลิ๊กปุ่ม Drop
6.หากต้องการลบหลายๆ ฟิลด์สามารถเลือก Checkbox หน้ารายการที่ต้องการ แล้วคลิ๊กปุ่ม Drop

ขั้นตอน วิธีการฐานข้อมูล Database MySQL

ขั้นตอน วิธีการฐานข้อมูล Database MySQL
เมื่อเข้ามาในหน้า phpMyAdmin ให้คลิ๊กแท็บเมนู Databases
1.เข้าสู่หน้า phpMyAdmin แล้วเลือกแท็บเมนู Database
 เมื่อเข้ามาในหน้า Database จะพบกับฐานข้อมูลที่มีทั้งหมด
2.เมื่อเข้ามาในหน้า Databases จะพบกับฐานข้อมูลทั้งหมดที่มีอยู่
เลือก Checkbox ที่ด้านหน้ารายการฐานข้อมูล Database ที่ต้องการลบ แล้วคลิ๊ก Drop เพื่อลบฐานข้อมูล
3.ในการลบสามารถเลือก Checkbox ที่ด้านหน้ารายการฐานข้อมูล Database ที่ต้องการลบ แล้วคลิ๊ก Drop เพื่อลบฐานข้อมูล

ขั้นตอน วิธีการลบตาราง Table ในฐานข้อมูล MySQL

ขั้นตอน วิธีการลบตาราง Table ในฐานข้อมูล MySQL
เข้ามาในหน้า phpMyAdmin แล้วเลือกแท็บเมนู Databases
1.เข้ามาในหน้า phpMyAdmin  แล้วเลือกแท็บเมนู Database 
เลือกฐานข้อมูล Database ที่ต้องการ
2.เลือกฐานข้อมูล Database ที่ต้องการ ในที่นี้เลือกฐานข้อมูลที่ชื่อว่า test1
เมื่อเข้ามาในฐานข้อมูล Database ที่เลือกแล้วจะพบกับตาราง Table ทั้งหมดที่มีอยู่
3.เมื่อเข้ามาในฐานข้อมูล Database ที่เลือกแล้วจะพบกับตาราง ตาราง Table ทั้งหมดที่มีอยู่
สามารถคลิ๊ก Drop เพื่อลบที่ตาราง Table ที่่ต้องการได้เลย  แต่จะสามารถลบได้ทีละรายการ
4.สามารถคลิ๊ก Drop เพื่อลบที่ตาราง Table ที่่ต้องการได้เลย  แต่จะสามารถลบได้ทีละรายการเท่านั้น
ลบตารางทีละหลายๆ ตารางได้  โดยเลือก Checkbox หน้าตาราง Table ที่้ต้องการเเล้วเลือก Drop เพื่อลบข้อมูลก็ได้
5.หรือสามารถลบตารางทีละหลายๆ ตารางได้  โดยเลือก Checkbox หน้าตาราง Table ที่้ต้องการเเล้วเลือก Drop เพื่อลบข้อมูลก็ได้