14 ธ.ค. 2557

คำสั่ง SQL

1.คำสั่ง CREATE TABLE
CREATE TABLE phonebook (id INT (4) NOT NULL
AUTO_INCREMENT, fname VARCHAR (35) , lname VARCHAR (35) ,
email VARCHAR (50) , office VARCHAR (200) , province CHAR (2) ,
PRIMARY KEY(id), UNIQUE(id), INDEX(id)) 
               โดยทั่วไปขนาดของตารางข้อมูลหนึ่งๆ จะมีขนาดไม่เกิน 2G หรือ 4G ขึ้นอยู่กับระบบปฏิบัติการ เราสามารถทำให้ประหยัดเนื้อที่ได้อีกโดยการบีบอัด (PACK) ข้อมูลดัชนี ซึ่งสามารถให้บีบอัดโดยกำหนดค่าPACK_KEYS=1 การบีบอัดนี้จะทำให้การทำงานช้าลง แต่ก็ประหยัดเนื้อที่ขึ้น และตามปกติถ้าผู้ใช้ไม่ได้กำหนดให้บีบอัด ข้อมูลที่เป็นสตริงหรือตัวอักษรก็จะได้รับการบีบอัดข้อมูลอยู่แล้ว สำหรับข้อมูลตัวเลข ค่าการทำงานปกติจะไม่รับการบีบอัด เว้นแต่กำหนดการบีบอัดด้วยการใช้ UNION จะใช้กรณีที่ต้องการรวมตารางข้อมูลหลายๆ ตารางเข้าด้วยกันเป็นอันเดียว ซึ่งจะทำงานกับตารางประเภท MERGE เท่านั้น

2.คำสั่ง DROP TABLE
DROP TABLE phonebook
             เป็นคำสั่งเพื่อให้ลบตารางข้อมูลออกจากระบบ สำหรับออปชัน RESTRICT และ CASCADE ยังไม่สามารถงานได้ในปัจจุบัน เนื่องจากเป็นความสามารถที่มีแผนจะรองรับในอนาคต สำหรับการใช้คำสั่ง DROP  TABLE จะต้องให้ความระมัดระวังในการใช้งานเป็นอย่างยิ่ง โดยเฉพาะการทำงานกับตารางข้อมูลประเภทnontransaction  เพราะจะทำการ commit การทำงานโดยอัตโนมัติ

3.คำสั่ง DELETE
DELETE FROM phonebook WHERE id=4
               เป็นคำสั่งสำหรับลบข้อมูลจากตาราง โดยสามารถกำหนดเงื่อนไขสำหรับการลบได้ ซึ่งถ้าไม่ได้ระบุเงื่อนไข จะเป็นการลบข้อมูลทั้งหมดออกจากตาราง และถ้าอยู่ใน AUTOCOMMIT mode (กรณีปกติทั่วไป) จะไม่สามารถทำการยกเลิกการลบครั้งนี้ได้
4.คำสั่ง TRUNCATE
TRUNCATE phonebook
เป็นคำสั่งที่ให้ผลเช่นเดียวกับ DELETE FROM table_name แต่มีข้อแตกต่างดังนี้
- จะทำการดรอปตารางข้อมูลก่อน แล้วทำการสร้างใหม่ ซึ่งจะให้ผลที่เร็วกว่าการลบตารางทั้งหมด
- การทำงานเป็น non-transaction ไม่สามารถทำการยกเลิกได้

5.คำสั่ง SELECT
SELECT id, fname FROM phonebook ORDER BY fname DESC
           เป็นคำสั่งสำหรับการแสดงผล หรือการดึงข้อมูลจากตาราง โดยสามารถกำหนดเงื่อนไข รูปแบบและวิธีการได้อย่างหลากหลาย การดึงข้อมูลสามารถระบุว่าจะเลือกจากตารางเดียว หรือหลายตารางก็ได้
           การใช้ LIMIT rows ก็จะช่วยกำหนดให้ทำการดึงข้อมูลจากตาราง ได้ไม่เกินจำนวนแถว rows ที่ระบุ
การใช้คำสั่งคีย์เวิร์ดตามหลัง SELECT จะต้องใช้ให้ถูกต้อง มีบางคีย์เวิร์ดที่ต้องใช้เรียงลำดับกัน เช่น
HAVING clause ต้องใช้ตามหลัง GROUP BY clause และใช้ก่อน ORDER BY clause  เป็นต้น

            ตามปกติหากไม่ได้ระบุวิธีการจัดเรียงข้อมูล ก็จะเป็นการเรียงจากน้อยไปมาก (Ascending) หรือ คีย์เวิร์ด  ASC แต่ถ้าต้องการเรียงจากมากไปน้อย (Descending) ให้ใช้คีย์เวิร์ด DESC
การใช้คีย์เวิร์ด HAVING จะใช้ในกรณีร่วมกับ GROUP BY ซึ่งก็เป็นการกำหนดเงื่อนไขในการดึงข้อมูล ด้วยคำสั่ง SELECT
SELECT id,fname FROM phonebook GROUP BY fname HAVING id>2

6.คำสั่ง FLUSH
FLUSH TABLES phonebook
             เป็นคำสั่งที่ใช้สำหรับการลบหน่วยความจำภายใน (Internal Cache) ที่ใช้งาน ทั้งนี้การใช้คำสั่ง FLUSH  จะอนุญาตเฉพาะ user ที่มีสิทธิ์ (Privilege) เท่านั้น  Flush_option สามารถระบุได้ดังนี้
           -HOSTS ทำการล้าง hose cache table เพื่อปรับปรุงข้อมูลของ host หรือ client ที่คอนเน็กเข้าใช้งาน ซึ่งอาจมีการเปลี่ยนแปลง IP address หรืออื่นๆ โดยเมื่อทำการ flush เรียบร้อยแล้ว ก็จะอนุญาตให้ host นั้นๆ ทำการคอนเน็กเข้ามาใหม่อีกครั้งหนึ่ง
           -LOGS ปิดและเปิด log files ใหม่
           -PRIVILEGES ทำการ reload สิทธิ์ต่างๆ ของ user จาก grant tables ของ MySQL Server
           -TABLES ปิด tables ทั้งหมด หากตารางใดยังถูกเปิดอยู่ ก็จะถูก force ให้ปิดลง

7.คำสั่ง SHOW
SHOW DATABASES
           เป็นคำสั่งสำหรับแสดงรายละเอียด (Information) ของ databases, tables, columns หรือ สถานะต่างๆของServer แสดงรายละเอียดของ Databases, Tables, Columns และ Indexes
SHOW DATABASES แสดงรายชื่อ databases ทั้งหมดในระบบฐานข้อมูล
SHOW TABLES แสดงรายชื่อ tables ทั้งหมดของ current database
SHOW OPEN TABLES แสดงรายชื่อ tables ที่ถูกเปิดอยู่ในปัจจุบัน
SHOW COLUMNS แสดงรายละเอียดฟิลด์ทั้งหมดใน table นั้น (ให้ผลลัพธ์เช่นเดียวกับคำสั่ง DESCRIBE)
SHOW FIELDS ให้ผลลัพธ์เช่นเดียวกับ SHOW COLUMNS
SHOW INDEX แสดงรายละเอียดว่ามีดัชนีอะไรบ้างสำหรับ table นั้นๆ
SHOW KEYS ให้ผลลัพธ์เช่นเดียวกับ SHOW INDEX

8.คำสั่ง GRANT และ REVOKE
GRANT ALL PRIVILEGES ON demo TO user1@localhost WITH GRANT OPTION
REVOKE ALL PRIVILEGES ON demo FROM user1@localhost
- คำสั่ง GRANT เป็นคำสั่งสำหรับการกำหนดสิทธิ์หรือความสามารถใดๆ ให้กับ user
- คำสั่ง REVOKE หรือคำสั่งที่ตรงกันข้ามกับ GRANT คือเป็นการถอนหรือยกเลิกสิทธิ์ใดๆ จาก user
การใช้คำสั่ง GRANT หรือ REVOKE จะอนุญาตเฉพาะผู้บริหารระบบในการกำหนดสิทธิ์ต่างๆ สำหรับผู้ใช้    

MySQL จะแบ่งสิทธิ์ (Privilege) เป็น 4 ระดับ คือ
     1. Global level
    ระดับบนสุด ครอบคลุมทุก database รายละเอียดสำหรับสิทธิ์ของระดับนี้จะถูกเก็บไว้ในตาราง
mysql.user
     2. Database level
    ระดับ database ครอบคลุมเฉพาะใน database อันใดอันหนึ่ง เช่น ความสามารถในการกระทำใดๆ
ภายใน database นั้นๆ รายละเอียดสำหรับสิทธิ์ของระดับนี้ จะถูกเก็บไว้ในตาราง mysql.db และ mysql.host
     3. Table level
    ระดับ table ครอบคลุมเฉพาะภายในตารางนั้นๆ เช่น ความสามารถในการกระทำกับ table นั้นๆ
สามารถทำการ select, insert, delete, update ได้หรือไม่ เป็นต้น รายละเอียดสำหรับสิทธิ์ของระดับนี้ จะถูกเก็บอยู่ในตาราง mysql.tables_priv
      4. Column level
     ระดับ column ครอบคลุมเฉพาะฟิลด์ใดฟิลด์หนึ่งภายในตารางข้อมูล รายละเอียดสำหรับสิทธิ์ของระดับนี้ จะถูกเก็บอยู่ในตาราง mysql.columns_priv

9.คำสั่ง INSERT
INSERT INTO phonebook (id, fname, lname, email, office, province)
VALUES (6, 'sineenat', 'phradmali', 'sineenat@health.moph.go.th', 'ศทส.', '12')
       เป็นคำสั่งสำหรับการเพิ่มแถวข้อมูล หรือระเบียนใหม่เข้าตารางข้อมูล

10.คำสั่ง ALTER TABLE
ALTER TABLE phonebook ADD tel VARCHAR(30)
       ALTER TABLE เป็นคำสั่งสำหรับการปรับเปลี่ยนแก้ไขโครงสร้างของตารางข้อมูล เช่น การเพิ่ม-ลบฟิลด์, การสร้าง-ลบดัชนี, การเปลี่ยนประเภทข้อมูลของฟิลด์, การเปลี่ยนชื่อฟิลด์ เป็นต้น

30 พ.ย. 2557

ข้อสอบโอเน็ตการงานอาชีพ(คอมพิวเตอร์) O-NET

1.ข้อใด ไม่มี ระบบการทำงานพื้นฐานแบบคอมพิวเตอร์
ก.เครื่องคิดเลข
ข.นาฬิการะบบดิจิทัล
ค.เครื่องฝาก - ถอนเงินอัตโนมัติ
ง.เครื่องคำนวณร้านสะดวกซื้อ

2.อุปกรณ์ชนิดใดใช้เทคโนโลยีจานแสง (Optical Technology)
ก.เครื่องเล่นเทป
ข.หน่วยขับซีดีรอม
ค.หน่วยความจำแบบแฟลช
ง.อุปกรณ์รับเข้าแบบจอสัมผัส

3.ปัจจุบันเครื่องรับโทรทัศน์ที่ใช้เทคโนโลยีใหม่โดยมีขนาดบางและความคมชัดสูง ซึ่งเลือกใช้จอแสดงภาพชนิดใด
ก.CRT
ข.LCD
ค.LED
ง.PLASMA

4.ผู้ประกอบอาชีพ เป็นผู้พัฒนาเว็บไซต์ต้องเชี่ยวชาญความรู้ด้านใดบ้าง จากตัวเลือกต่อไปนี้
ก. ฮาร์ดแวร์คอมพิวเตอร์ ง. HTML ข. ระบบปฏิบัติการ จ. ระบบฐานข้อมูล ค. เว็บเซิร์ฟเวอร์ ฉ. ภาษาจาวา (Java)
ก.ข้อ ก. และ ค.
ข.ข้อ ข. และ จ.
ค.ข้อ ค. และ ง.
ง.ข้อ ค. และ จ.

5.ห้องสมุดแห่งหนึ่งต้องการพัฒนาระบบการยืมหนังสือโดยสามารถบันทึกข้อมูลการยืมหนังสือลงบนบัตรอิเล็กทรอนิกส์โดยไม่ต้องเขียนด้วยมือ ระบบนี้ควรใช้เทคโนโลยีในข้อใด
ก.Smart Card
ข.Fingerprint
ค.Barcode
ง.Wi-Fi
  
6.ข้อใดต่อไปนี้ถูกต้องที่สุด
ก.การบันทึกข้อมูลลงแผ่นดีวีดีใช้เทคโนโลยีแบบแม่เหล็ก
ข.หมายเลขไอพีเป็นหมายเลขที่ใช้กำกับ Network Interface Card
ค.หน่วยความจำสำรองเป็นหน่วยความจำที่มีคุณลักษณะแบบ Valatile
ง.รหัส ASCII และ EBCIDIC เป็นการวางรหัสตัวอักษรที่ใช้ขนาด 8 บิต


7.ระบบปฏิบัติการ Unix สามารถใช้งานไฟล์ ร่วมกับระบบปฏิบัติการใดได้
ก.ระบบปฏิบัติการ Mac OS
ข.ระบบปฏิบัติการ System V
ค.ระบบปฏิบัติการ Palm OS
ง.ระบบปฏิบัติการ Pocket PC OS

8.ข้อใดเป็นลักษณะของระบบปฏิบัติการ Linux
ก.ใช้เป็นระบบปฏิบัติการในโทรศัพท์มือถือ
ข.มีการติดต่อกับผู้ใช้งานรูปแบบบรรทัดคำสั่ง
ค.เป็นระบบปฏิบัติการที่มีการเปิดเผยโค้ดให้ดาวน์โหลดได้
ง.รูปแบบหน้าต่างคล้ายระบบปฏิบัติการ MS-DOS

9.ขณะใช้งานอินเทอร์เน็ต ปรากฎหน้าต่างที่ไม่ต้องการ ออกมารบกวนอยู่เสมอ และทำให้เครื่องคอมพิวเตอร์ทำงานช้าลง เหตุการณ์นี้เกิดจากโปรแกรมใด
ก.เวิร์ม
ข.ไวรัส
ค.สปายแวร์
ง.ม้าโทรจัน

10.ระบบปฏิบัติการแมคอินทอช เหมาะกับผู้ที่ทำงานในอาชีพใดต่อไปนี้มากที่สุด
ก.นักบัญชี
ข.ผู้สื่อข่าว
ค.นักตัดต่อภาพยนตร์
ง.ผู้ประกอบธุรกิจขายปลีก

 ที่มา http://www.trueplookpanya.com/examination/answer/10209/2809557
http://www.trueplookpanya.com/examination/answer/10210/2810366

23 พ.ย. 2557

PHP FUNCTION: ฟังก์ชันเกี่ยวกับข้อมูล Array

ฟังก์ชันเกี่ยวกับข้อมูล Array
         ภาษา PHP ได้เตรียมฟังก์ชันเกี่ยวกับการเก็บข้อมูลและการประมวลผลใน array ไว้เป็นจำนวน
มากสามารถทำการประมวลผลได้อย่างครบถ้วนทั้งการค้นหา การจัดเรียง การคัดแยก การนำข้อมูลเข้าใน array การคำนวณใน array การใช้ array เป็นโครงสร้างข้อมูล stack ฯลฯ เป็นต้น  รายชื่อของฟังก์ชันที่เกี่ยวข้องกับ array แบ่งเป็นกลุ่มต่างๆ แสดงได้ดังนี้
2 1) ฟังก์ชันเกี่ยวกับการกำหนด การเปลี่ยนแปลงข้อมูลใน array
            • array array ( )
สร้างข้อมูล array ใหม่กำหนดให้ตัวแปร ตัวอย่างการใช้อยู่ในหัวข้อ 2.8 ในบทที่ 2

             • array array_rand (array input [, int num_req])
ทำการสุ่มเลือกค่า key (index) จาก array เป็นจำนวนที่ต้องการ ให้ผลลัพธ์เป็น array
ของ key/index ที่สุ่มได้มีจำนวน element ตามที่ระบุใน argument num_req หากไม่
ระบุnum_req จะสุ่มค่า index/key มาให้เพียง 1 ตัว
เช่น
<?
$input = array("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun");
echo $input[array_rand($input)],"<br>\n";
$rand_keys = array_rand($input, 2);
echo $input[$rand_keys[0]] ,"<br>\n";
echo $input[$rand_keys[1]] ,"<br>\n";
print_r ($rand_keys);
?>
            • array array_fill ( int start_index, int num, mixed value)
ให้ผลเป็น array ที่มี index เริ่มตั้งแต่ start_index มีจำนวน element เท่ากับจำนวนที่
ระบุใน num ให้ทุกๆ element มีข้อมูลเป็นค่าที่ระบุใน value ตัวอย่างเช่น
$a = array_fill (3, 5, "None");
จะได้ตัวแปร array $a ที่มี element ได้แก่
Array ( [3]=>"None", [4]=>"None", [5]=>"None", [6]=>"None", [7]=>"None" )
            • int extract ( array var_array [, int extract_type [, string prefix]])
สร้างตัวแปรจาก associative array โดยใช้ key ของ element เป็นชื่อตัวแปรและค่าใน
element เป็นค่าของตัวแปรที่สร้างขึ้น สามารถกำหนดทางเลือกของการสร้างตัวแปรโดยระบุ
extract_type และกำหนดคำนำหน้าชื่อตัวแปรด้วย prefix ได้ตัวอย่างเช่น
$ar = array('a'=>100,'b'=>34,'c'=>69,'d'=>35,'e'=>20);
extract ($ar); จะสร้างตัวแปรขึ้น 5 ตัวได้แก่ $a, $b, $c, $d, $e มีข้อมูลเป็น 100,
34, 69, 35, 20 ตามลำดับ
         ทางเลือกของการสร้างตัวแปรในฟังก์ชัน extract (extract_type) สามารถใช้ชื่อ
constant ได้ดังนี้
o EXTR_OVERWRITE หากมีตัวแปรชื่อที่ซ้ำอยู่แล้วให้ทับตัวแปรนั้นด้วยข้อมูลที่ extract
จาก array
o EXTR_SKIP หากมีตัวแปรชื่อที่ซ้ำอยู่แล้วให้ข้ามตัวแปรนั้นไม่ต้องเปลี่ยนแปลงค่า
WEB PROGRAMMING
Using PHP. and MySQL.98 98
o EXTR_PREFIX_SAME หากมีตัวแปรชื่อที่ซ้ำอยู่แล้วให้นำหน้าชื่อตัวแปรใหม่ที่ซ้ำด้วย
prefix
o EXTR_PREFIX_ALL ให้สร้างตัวแปรทั้งหมดจาก array โดยใส่ prefix นำหน้าชื่อตัวแปร
ทุกตัว
o EXTR_PREFIX_INVALID ให้สร้างตัวแปรโดยใช้ prefix นำหน้าชื่อเฉพาะชื่อที่ผิดวิธีการ
ตั้งชื่อเท่านั้น ส่วนตัวแปรที่ key ตรงตามวิธีตั้งชื่ออยู่แล้วไม่ต้องนำหน้าชื่อตัวแปรใหม่ด้วย
prefix
o EXTR_IF_EXISTS ให้ทับตัวแปรที่มีอยู่แล้วเฉพาะตัวแปรที่อยู่ใน symbol table แล้ว
เท่านั้น
o EXTR_PREFIX_IF_EXISTS ให้สร้างตัวแปรนำหน้าชื่อด้วย prefix หากชื่อตัวแปรนั้นมีอยู่
แล้วใน symbol table
o EXTR_REFS ทำการ extracts ตัวแปรแบบ references คืออ้างอิงไปยังข้อมูลใน array
ดังนั้นตัวแปรที่เกิดขึ้นใหม่จะชี้ไปยังข้อมูลเดียวกับ element ใน array สามารถใช้ type นี้
ร่วมกับวิธีอื่นได้โดยการ OR เช่น EXTR_SKIP OR EXTR_REFSค่า default ของ
extract_type คือ EXTR_OVERWRITE
ผลลัพธ์จากฟังก์ชันนี้จะให้ตัวเลขจำนวนเต็มแสดงจำนวนตัวแปรที่สร้างขึ้นได้สำเร็จ

        • array compact ( mixed varname [, mixed varname[,...]])
เป็นฟังก์ชันที่ทำงานตรงข้ามกับ extract คือจะรวมเอาตัวแปรต่างๆ เข้ามาเป็น array และ
ให้ผลลัพธ์เป็น array ที่รวมตัวแปรต่างๆ เข้ามา โดย key ของ array ได้มาจากชื่อตัวแปร และค่าที่เก็บใน array element คือค่าข้อมูลที่มาจากตัวแปร การส่งชื่อตัวแปรสามารถใช้เป็น string แสดงชื่อตัวแปร หรือส่งเป็น array ที่บรรจุ string ชื่อของตัวแปรก็ได้เช่น
$uName = "James Bond";
$uFavColor = "red";
$lastAccess = date( "r");
$my_env = compact ('uName','uFavColor','lastAccess');
or
$env_vars = array('uName','uFavColor','lastAccess');
$my_env = compace($env_vars);
จากตัวอย่างข้างต้นไม่ว่าจะใช้ฟังก์ชัน compact ส่งชื่อตัวแปรแต่ละตัวใน argument
หรือส่ง array ที่บรรจุชื่อตัวแปร ก็จะได้รับผลเหมือนกัน คือได้ array ที่มี 3 elements ได้แก่
$my_env ['uName'] => "James Bond"
$my_env['uFavColor'] => "red" และ
$my_env['lastAccess'] => ข้อความวันที่และเวลาที่ได้จากตัวแปร $lastAccess

2 2) ฟังก์ชันเกี่ยวกับ index, internal pointer ของ array
      • array array_keys ( array ary [, mixed search_value])
ให้ผลลัพธ์เป็น array ของ key ที่มาจาก ary หากมีการระบุ search_value จะให้ผลเฉพาะ
key ของ element ที่มีค่าข้อมูล (value) ตรงกับ search_value เท่านั้น เช่น
$a1 = array(0 => 100, "color" => "red");
$a2 = array_keys($a1); //
$b1 = array("blue", "red", "green", "blue", "blue");
$b2 = array_keys($b1, "blue");
$c1 = array("color" => array("blue", "red", "green"),
 "size" => array("small", "medium", "large"));
$c2 = array_keys($c1);
ในตัวอย่างข้างต้นนี้จะได้ผลลัพธ์ได้แก่
$a2 = Array([0] => 0, [1] => color)

บทที่ 3
ฟังก์ชันมาตรฐานของภาษา PHP.99
$b2 = Array([0] => 0, [1] => 3, [2] => 4)
$c2 = Array([0] => color, [1] => size)
ตัวแปร array ในภาษา PHP แต่ละตัวจะมี internal pointer เพื่อใช้ชี้ตำแหน่ง element โดย
อัตโนมัติเมื่อไม่มีการระบุค่า key หรือ index (เช่น $a[ ] = 20) เมื่อมีการใช้งาน internal pointerเพื่ออ้างถึง element แล้ว internal pointer จะเลื่อนไปชี้ element ถัดไปโดยอัตโนมัติในการเขียนโปรแกรมสามารถใช้ฟังก์ชันเพื่อควบคุมหรือใช้งาน internal pointer ของตัวแปร array แต่ละตัวได้โดยมีฟังก์ชันที่เกี่ยวข้องดังนี้
      • mixed key(array ary)
ให้ค่า key ของตัวชี้ภายใน array ที่ชี้อยู่ปัจจุบัน
      • mixed next(array ary)
เลื่อนตำแหน่งตัวชี้ภายในของ array $ary (internal pointer )ไปยัง element ถัดไป
และให้ผลลัพธ์เป็นค่าที่เก็บใน element ที่ถูกชี้ใหม่
      • mixed prev(array ary)
เลื่อนตำแหน่งตัวชี้ภายในของ array $ary (internal pointer ) กลับไปยัง element ก่อน
หน้า และให้ผลลัพธ์เป็นค่าที่เก็บใน element ที่ถูกชี้
      • mixed end (array ary)
ตั้งตำแหน่งตัวชี้ภายในของ array $ary (internal pointer )ไปยัง element สุดท้าย และ
ให้ผลลัพธ์เป็นค่าที่เก็บใน element สุดท้ายนั้น
      • mixed reset (array ary)
ตั้งตำแหน่งตัวชี้ภายในของ array (internal pointer )ไปยัง element แรกสุด และให้
ผลลัพธ์เป็นค่าที่เก็บใน element แรกนั้น
       • array each (array ary)
      ให้ผลลัพธ์เป็น array 4 elements ที่ให้ข้อมูลเกี่ยวกับ element ปัจจุบันที่ถูกชี้ด้วย
pointer ของ array ary ซึ่ง element ทั้งสี่ของผลลัพธ์ได้แก่ [0][1]['key'] และ ['value'] โดย
element [0] และ ['key'] จะมีข้อมูลจาก index/key ของ array ary ส่วน element [1] และ
['value'] จะมีข้อมูลที่มาจากข้อมูลใน array ary ตัวอย่างเช่น
<?
$prod = array('10023''=>'Cracker', '56712'=>'Apple',
'84678'=>'Scooby');
$elem = each($prod);
?>
จะได้ตัวแปร $elem เป็น array ที่มีข้อมูลได้แก่ (ตัวชี้ใน array จะเริ่มชี้ที่ element แรก)
[0] => '10023', [1] =>'Cracker', [key]=>'10023', [value] =>'Cracker'
WEB PROGRAMMING
Using PHP. and MySQL.100 100
ฟังก์ชันนี้สามารถใช้แทน foreach เพื่อเข้าถึงแต่ละ element ใน array ได้โดยใช้กับ
while เช่น
<?php
$fruit = array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');
reset($fruit);
while (list($key, $val) = each($fruit)) {
 echo "$key => $val\n";
}
?>

2 3) การค้นหาและเลือกข้อมูลใน array
      • array array_filter ( array input [, callback callback])
ฟังก์ชัน array_filter จะให้ผลเป็น array ที่กรองเอาเฉพาะข้อมูลใน element ที่ตรงตาม
เงื่อนไขที่กำหนดโดยการใช้ฟังก์ชันที่สร้างขึ้น (callback function) ซึ่งจะยังคง key เดิมไว้ด้วย การสร้าง callback function จะต้องรับค่าจาก value ของแต่ละ element ใน array เข้าใน argumentเพื่อนำไปตรวจสอบและให้ผลเป็น boolean โดย element ที่จะถูกเลือกไปเป็นผลลัพธ์เป็น element ที่ให้ผลลัพธ์เป็น true เท่านั้น ตัวอย่างเช่น หากต้องการให้กรองเอาเฉพาะ element ที่มีข้อความที่มี
ความยาว 3 อักขระ เท่านั้น สามารถสร้างฟังก์ชันตรวจสอบและใช้ฟังก์ชัน array_filter ( ) ได้ดังนี้
<?
function acpt_str($str) {
$len = strlen($str);
return ($len==3);
}
$a = array("somsri","eak","surapont","meta","jim","nut");
$b = array_filter($a,"acpt_str");
print_r($b);
?>
ผลลัพธ์จะได้ array $b ที่มีข้อมูลดังนี้
Array ( [1] => eak [4] => jim [5] => nut )

        • bool in_array ( mixed needle, array haystack [, bool strict])
ฟังก์ชัน in_array( ) ใช้ตรวจสอบว่ามีข้อมูลที่ระบุตรงกับข้อมูลใน element ใดของ array
หรือไม่ โดยจะให้ผลเป็น Boolean แสดงว่าพบหรือไม่ argument ของฟังก์ชันนี้ได้แก่
o needle คือข้อมูลที่ต้องการค้นหาเป็นข้อมูลชนิดใดๆ
o haystack คือ array ที่ทำการค้นหาข้อมูล
o stict เป็น Boolean ระบุว่าต้องการตรวจสอบข้อมูลที่ตรงชนิดกันด้วยหรือไม่ (เนื่องจาก
ปกติ PHP จะแปลงชนิดข้อมูลให้เอง) หากเป็น true คือชนิดต้องตรงกันด้วย
ตัวอย่างเช่น
in_array(30,array('abc','30years','beatle'))
ให้ผล true เนื่องจาก 30 เมื่อเปรียบเทียบกับข้อมูล '30years' PHP จะแปลงให้เป็นชนิด
integer ซึ่งได้ 30 เช่นกันแต่หากกำหนด strict เป็น true เช่น
in_array(30,array('abc','30years','beatle'),true)
จะให้ผล false เนื่องจาก 30 และ '30years' มีชนิดข้อมูลต่างกัน
หากข้อมูลที่ต้องการค้นหาเป็นข้อความจะเปรียบเทียบแบบ case sensitive คือถืออักษรตัว
ใหญ่เล็กมีความต่างกัน เช่น
in_array ('Abc', array('abc','30years','beatle'))
จะให้ผล false เนื่องจาก 'Abc' และ 'abc' มีตัว A และ a แตกต่างกัน

      • mixed array_search ( mixed needle, array haystack [, bool strict])
ฟังก์ชัน array_search ทำหน้าที่ตรวจสอบว่ามีข้อมูลตรงกับ element ใดๆ ใน array หรือไม่
เช่นเดียวกันกับฟังก์ชัน in_array( ) แต่จะให้ผลลัพธ์เป็นค่า key ของ element ที่พบ หรือให้ค่า false
หากไม่พบ (ดูรายละเอียดของ argument ต่างๆ ในฟังก์ชัน in_array( ) ที่ผ่านมาแล้ว)

       • bool array_key_exists ( mixed key, array ary)
เป็นฟังก์ชันที่ทำการตรวจสอบว่าใน array ary มี element ที่มีค่า key ตามที่ระบุใน
argument key หรือไม่ จะให้ผลเป็น Boolean แสดงว่าพบให้ค่า true หรือไม่พบให้ค่า false

2 4) การจัดเรียงข้อมูลใน array
การจัดเรียงลำดับข้อมูลใน array มีการจัดเรียงลำดับจากข้อมูล 2 ส่วนได้แก่ จากข้อมูลที่เก็บ
ในแต่ละ element หรือจาก value และการเรียงลำดับจาก key/index ที่เป็นตัวชี้ element ต่างๆ ซึ่งสามารถใช้เป็นข้อความได้ (คือ associative array) และการจัดเรียงลำดับยังอาจจะจัดเรียงจากข้อมูลน้อยไปหามาก (ascending) หรือมากไปหาน้อย (descending) หรือเรียกว่า reverse order หากเป็นข้อความภาษาอังกฤษยังอาจมีการเรียงโดยเป็นลักษณะ case sensitive หรือ case insensitive คือแยกความแตกต่างระหว่างอักษรตัวใหญ่ (A-Z) กับตัวเล็ก (a-z) หรือไม่ กรณี case sensitive ถือว่าอักษร a กับ A ต่างกัน แต่หากเป็น case insensitive ถือว่าอักษร a กับ A เหมือนกันฟังก์ชันการเรียงลำดับข้อมูลใน array ของภาษา PHP มีฟังก์ชันต่างๆ ได้แก่ sort ( ), rsort
( ), arsort( ), asort( )
       • bool sort ( array $ary [, int sort_flags])
ฟังก์ชัน sort( ) เรียงลำดับข้อมูลใน array จากน้อยไปมาก สามารถกำหนดให้เรียงลำดับแบบ
ตัวเลขหรือแบบข้อความได้ฟังก์ชันนี้จะจัด index ให้ใหม่โดยจะยกเลิก key/index เดิม มีลักษณะการจัดเรียงข้อความแบบ case sensitive คือถืออักษรตัวใหญ่และตัวเล็กแตกต่างกันผลลัพธ์จากฟังก์ชันนี้นอกจากจะจัดเรียงข้อมูลที่อยู่ใน array $ary แล้ว ยังให้ผลลัพธ์เป็น trueหากสามารถจัดเรียงได้สำเร็จ หากไม่สามารถจัดเรียงได้จะให้ผลเป็น false

      sort_flags เป็นการกำหนดวิธีการจัดเรียงมี 3 วิธีได้แก่
• SORT_REGULAR – เรียงตามชนิดข้อมูล (เป็นค่า default)
• SORT_NUMERIC – เรียงแบบตัวเลข
• SORT_STRING – เรียงแบบข้อความ
ตัวอย่างเช่น
$a = array('cameroon', 'bolivia', 'Norway', 'finland', 'finland/2',
'finland18');
sort($a);
ผลลัพธ์ตัวแปร $a หลังจากการจัดเรียงจะได้
Array([0]=>Norway, [1]=>bolivia, [2]=>cameroon, [3]=>finland, [4]
=>finland18, [5]=>finland2 )

ตัวอย่างการเรียงลำดับข้อมูลตัวเลข
$a = array(38,198,26,57,9,'');
sort($a);
sort($a, SORT_NUMERIC);
sort($a, SORT_STRING);
WEB PROGRAMMING
Using PHP. and MySQL.102 102
ผลลัพธ์ตัวแปร $a หลังจากการจัดเรียงโดยไม่กำหนด sort_flags หรือกำหนดเป็น
SORT_NUMERIC จะได้
Array ( [0]=>'', [1]=>9, [2]=>26, [3]=>38, [4]=>57, [5]=>198 )
แต่หากกำหนด sort_flags เป็น SORT_STRING จะได้ผลลัพธ์เป็น
Array ( [0]=>'', [1]=>198, [2]=>26, [3]=>38, [4]=>57, [5]=>9 )
     ฟังก์ชัน sort( ) จะทำการยกเลิกและกำหนดค่า key/index ใหม่ดังตัวอย่างนี้
$a = array
('ca'=>'cameroon','bo'=>'bolivia','no'=>'norway','fi'=>'finland');
sort($a);
ผลจากการจัดเรียงจะได้ array $a ใหม่เป็น
Array ([0]=>bolivia, [1]=>cameroon, [2]=>finland, [3]=>norway )

      • bool rsort ( array $ary [, int sort_flags])
ฟังก์ชัน rsort( ) เป็นฟังก์ชันเรียงลำดับเช่นเดียวกับ sort( ) คือจะเรียงลำดับข้อมูล (value) ใน
array โดยจะกำหนด key/index ให้แต่ละ element ใหม่ตามลำดับที่จัดเรียงข้อมูล ข้อมูลข้อความที่
จัดเรียงจะถือว่าอักษรใหญ่กับเล็กเป็นคนละตัว (case sensitive) สามารถกำหนดวิธีจัดเรียงแบบตัวเลข
หรือข้อความได้แต่แตกต่างกันคือจะจัดเรียงจากมากไปหาน้อย (reverse order)
ตัวอย่างการเรียงลำดับข้อมูลตัวเลข
$a = array(38,198,26,57,9,'');
rsort($a);
ผลจากการจัดเรียงด้วย rsort( ) จะได้ array $a ใหม่เป็น
Array ([0]=>198, [1]=>57, [2]=>38, [3]=>26, [4]=>9, [5] =>'')

     • bool asort ( array $ary [, int sort_flags])
ฟังก์ชัน asort( ) เป็นฟังก์ชันเรียงลำดับเช่นเดียวกับ sort( ) คือจะเรียงลำดับข้อมูล (value) ใน
array ข้อมูลข้อความที่จัดเรียงจะถือว่าอักษรใหญ่กับเล็กเป็นคนละตัว (case sensitive) สามารถ
กำหนดวิธีจัดเรียงแบบตัวเลขหรือข้อความได้จะจัดเรียงจากน้อยไปหามาก แต่มีความแตกต่างกันคือ
จะคงค่า key/index ที่สัมพันธ์กับแต่ละ element เดิมไว้
ตัวอย่างเช่น
$a = array
('ca'=>'cameroon','bo'=>'bolivia','no'=>'norway','fi'=>'finland');
asort($a);
ผลจากการจัดเรียงจะได้ array $a ใหม่ด้วย asort( ) จะได้เป็น
Array ( [bo] => bolivia [ca] => cameroon [fi] => finland [no] =>
norway )

      • bool arsort ( array $ary [, int sort_flags])
ฟังก์ชัน arsort( ) เป็นฟังก์ชันเรียงลำดับที่คงค่า key/index ที่สัมพันธ์กับแต่ละ element เดิม
ไว้เช่นเดียวกับ asort( ) แต่จะเรียงลำดับจากมากไปหาน้อย (reverse order)
การเรียงลำดับข้อมูลใน array โดยให้เรียงลำดับตามค่าของ key/index มี 2 ฟังก์ชัน ได้แก่
ksort( ) และ krsort( ) ทั้งสองฟังก์ชันจะจัดเรียงลำดับโดยใช้ key ทั้งที่เป็นตัวเลข (numeric key)
หรือข้อความ (associative array) โดยถือ case sensitive ซึ่ง ksort( ) จะจัดเรียงจากน้อยไปมาก
บทที่ 3
ฟังก์ชันมาตรฐานของภาษา PHP.103
ส่วน krsort( ) จะจัดเรียงจากค่า key มากไปน้อย และสามารถกำหนด sort_flags ได้เช่นเดียวกับ
ฟังก์ชัน sort( )

• bool ksort ( array $ary [, int sort_flags])

• bool krsort ( array $ary [, int sort_flags])
       การจัดเรียงโดยทั่วไปจะจัดเรียงลำดับตามรหัสของอักขระที่เป็น ASCII code แม้แต่ข้อความที่
มีลำดับตัวเลขต่อท้าย เช่น 'prod1', 'prod16', 'prod2', 'prod10'จะถูกเรียงลำดับเป็น 'prod1','prod10', 'prod16', 'prod2' เนื่องจากอักขระเลข 2 มีค่ารหัสมากกว่าเลข 1 แต่ในบางครั้งการเรียงลำดับลักษณะที่มีตัวเลขผสมอยู่เรามักต้องการเรียงลำดับโดยดูค่าของตัวเลขเป็นสำคัญด้วย เช่นตัวอย่างก่อนหน้าต้องการให้เรียงลำดับเป็น 'prod1', 'prod2', 'prod10', 'prod16' ตามลำดับเช่นนี้จะต้องใช้การเรียงลักษณะที่เรียกว่า natural order ซึ่งใน PHP มีฟังก์ชัน 2 ฟังก์ชันได้แก่
natcasesort( ) และ natsort( ) โดย natcasesort( ) จะเป็น case insensitive คือถือว่าตัวอักษร
ภาษาอังกฤษตัวใหญ่และตัวเล็กเหมือนกัน ฟังก์ชันทั้งสองจะคง key ที่สัมพันธ์กับค่าที่เก็บข้อมูลไว้

• void natcasesort (array $ary)

• void natsort (array $ary)
     วิธีการจัดเรียงข้อมูลมีส่วนสำคัญคือการเปรียบเทียบข้อมูลไม่ว่าจะเป็นข้อความหรือตัวเลข ซึ่ง
หากเป็นข้อความจะเปรียบเทียบรหัสของแต่ละอักขระ โดยเริ่มจากซ้ายไปขวาหากพบว่ามีความแตกต่าง
ที่ตำแหน่งใดก็จะให้ผลการเปรียบเทียบตำแหน่งแรกที่พบ ในข้อมูลบางประเภทที่กำหนดเองหรือแม้แต่
เป็นภาษาที่ไม่ใช่ภาษาอังกฤษหากต้องการเรียงลำดับข้อมูลตามความต้องการที่แตกต่างไปจากการ
เปรียบเทียบข้อความตามปกติหรือแม้แต่เป็นตัวเลขที่ไม่ได้เปรียบเทียบตามแบบปกติก็ตาม ก็สามารถ
กำหนดวิธีการเปรียบเทียบข้อมูลเพื่อใช้ในการจัดเรียงเองได้เป็นฟังก์ชันที่สร้างขึ้นเอง (user defined
function)ในภาษา PHP. มีฟังก์ชันการจัดเรียงลำดับข้อมูลใน array ที่สามารถกำหนดวิธีการจัดเรียงข้อมูลเองได้ 3 ฟังก์ชันได้แก่ usort( ) เพื่อจัดเรียงจากน้อยไปมากโดยจัดค่า index/key ให้ใหม่ตามผลการจัดเรียงข้อมูลที่ได้ uasort ( ) จัดเรียงโดยให้คง index/key คู่กับค่าข้อมูลเดิมไว้และ uksort( ) ให้จัดเรียงตาม key โดยใช้ user define function ในการจัดเรียงตาม keyการสร้างฟังก์ชันเปรียบเทียบเพื่อการจัดเรียงข้อมูลจะต้องเป็นฟังก์ชันที่รับ argument 2 ตัวเช่น mycompare($a, $b) เพื่อนำมาเปรียบเทียบกันและให้ผลลัพธ์เป็น integer เพื่อแสดงผลการเปรียบเทียบโดย ให้ผลเป็น 0 หากเปรียบเทียบได้เท่ากัน ให้ผลเป็น ค่าบวกที่มากกว่า 0 หากargument แรกคือ argument ตัวซ้ายมากกว่า argument ตัวที่สองหรือ argument ทางขวาและให้ผลเป็นค่าน้อยกว่า 0 (ค่าลบ) หาก argument ตัวแรกน้อยกว่าตัวอย่างการสร้างฟังก์ชันที่ใช้เปรียบเทียบหากต้องการเปรียบเทียบค่าตัวเลขโดยไม่คำนึงถึงเครื่องหมายบวกลบ (ใช้เฉพาะค่า) สามารถสร้างฟังก์ชันเพื่อเปรียบเทียบได้ดังนี้
function unum_cmp ($n1, $n2) {
$j1 = abs($n1);
$j2 = abs($n2);
$result = $j1 - $j2;
return $result;
}

รูปแบบการใช้ฟังก์ชันจัดเรียงที่กำหนดวิธีเปรียบเทียบเอง
• bool usort ( array $ary, callback cmp_function)
• bool uasort ( array $ary, callback cmp_function)
• bool uksort ( array $ary, callback cmp_function)

ตัวอย่างการใช้ฟังก์ชันเปรียบเทียบที่สร้างเองกับการจัดเรียงข้อมูล
$a = array(143,-50,30,80,20,-60);
usort($a, "unum_cmp");
WEB PROGRAMMING
Using PHP. and MySQL.104 104
จะได้ผลลัพธ์ตัวแปร $a ที่ถูกจัดเรียงแล้วเป็น
Array ([0]=>20, [1]=>30, [2]=>-50, [3]=>-60, [4]=>80, [5]=>143 )
ซึ่งหากใช้ฟังก์ชันการจัดเรียงธรรมดาคือ sort( ) จะได้ผลลัพธ์
Array ([0]=>-60, [1]=>-50, [2]=>20, [3]=>30, [4]=>80, [5]=>143 )

2 5) การคำนวณ ประมวลผล
     • array array_count_values (array ary)
ให้ผลลัพธ์เป็น array ที่แสดงผลการนับจำนวน (ความถี่) ของข้อมูลแต่ละค่าที่มีใน array ary
โดย key ของผลลัพธ์ได้จากค่าข้อมูล และ value ที่เก็บจะเป็นจำนวนครั้งที่ปรากฏใน ary เช่น
$a = array(1, "hello", 1, "world", "hello");
$b = array_count_values($a);
ผลลัพธ์ของตัวแปร $b จะได้ Array ( [1] => 2, [hello] => 2, [world] => 1)

     • mixed array_sum ( array ary)
ฟังก์ชัน array_sum ทำการคำนวณหาค่าผลรวมของข้อมูลที่เก็บใน array ary หากมี
element ใน array ที่มีข้อมูลชนิดอื่นที่ไม่ใช่ตัวเลข จะพยายามแปลงให้เป็นตัวเลขตามวิธีการ
มาตรฐานของ PHP. ผลลัพธ์จะได้เป็นข้อมูลตัวเลขจำนวนเต็มหรือจุดทศนิยมขึ้นกับข้อมูลใน array ary

2 6) การแยก-รวม array
• array array_merge ( array arry1, array arry2 [, array ...])
ฟังก์ชัน array_merge( ) ให้ผลลัพธ์เป็น array ที่ได้จากการรวม array ใน argument โดย
เริ่มจาก element ใน array แรกแล้วเรียงต่อด้วย array ต่อๆ ไป หากมี key/index เป็นข้อความที่ซ้ำ
กัน element ที่มาจาก array หลังจะทับข้อมูลของ element ที่มี string index ที่ตรงกัน

• array array_combine ( array keys, array values)
ให้ผลลัพธ์เป็น array ที่ได้จาก array ใน argument 2 ตัว โดยใช้ค่าข้อมูลใน argument
แรกเป็น (keys) เป็น key/index และใช้ข้อมูลจาก array values เป็นค่าข้อมูล หาก array ทั้งสองใน
argument มีจำนวน element ไม่เท่ากัน หรือเป็น empty array จะให้ผลเป็น false

• array array_slice ( array arry, int offset [, int length])
ฟังก์ชัน array_slice() ให้ผลเป็น array ที่มี element มาจาก array ใน argument เริ่ม
จากelement ลำดับที่ระบุใน offset เป็นจำนวน element ที่ระบุใน length
หากค่า offset เป็นลบจะเริ่มจาก element ลำดับที่ย้อนกลับมาจาก element สุดท้าย หากไม่
ระบุ length จะนำข้อมูลตั้งแต่ element ลำดับที่ตาม offset จนถึง element สุดท้าย ฟังก์ชันนี้จะไม่
สนใจ key ผลลัพธ์จะได้จากลำดับที่ element วางอยู่ใน array
ตัวอย่างเช่น

<?php
$a = array('apple','banana','coconut','grape','orange');
$b = array_slice($a,2,2);
$c = array_slice($a,-4,2);
$d = array_slice($a,2);
$e = array_slice($a,-2);
?>

ผลลัพธ์ตัวแปร array ต่างๆ ได้แก่
b = Array ( [0] => coconut [1] => grape )
c = Array ( [0] => banana [1] => coconut )
d = Array ( [0] => coconut [1] => grape [2] => orange )
e = Array ( [0] => grape [1] => orange )

2 7) การเข้าถึงข้อมูลใน array
• integer count (array ary[, int mode])
• integer sizeof(array ary[, int mode])
ฟังก์ชัน count( ) และ sizeof( ) เป็นฟังก์ชันที่ให้จำนวน element ที่มีใน array ary หากต้องการนับจำนวน element ใน array หลายมิติต้องกำหนด mode เป็น COUNT_RECURSIVE หรือ
1 หากไม่กำหนดหรือกำหนดเป็นค่า 0 จะนับ element ของ array ลำดับนอกสุด คือ index ซ้ายสุด
• mixed current ( array ary)
• mixed pos (array ary)
ฟังก์ชัน current ( ) และ pos( ) ให้ข้อมูลจาก array ary ณ ตำแหน่งที่ internal pointer
ของ array ary นั้นชี้อยู่ โดยไม่มีผลต่อ pointer (pointer จะไม่เลื่อนไปยัง element อื่นหลังจากใช้
ฟังก์ชันนี้)
• void list(mixed)
list( ) เป็น language construct ที่ใช้ดึงค่าจาก array นำมาใส่ในตัวแปรที่อยู่ใน
argument มีรูปแบบที่แปลกกว่าคำสั่งอื่นๆ เนื่องจากเป็นคำสั่งที่อยู่ทางด้านซ้ายของ expression
คือเขียนคำสั่งในรูปแบบ list(var1,var2,…) = array เช่น

<?php
$a = array('apple','banana','coconut','grape','orange');
list($x,$y,$z) = $a;
?>

จากตัวอย่างนี้ตัวแปร $x จะมีข้อมูล 'apple' ตัวแปร $y จะมีข้อมูล 'banana' และ $z จะมี
ข้อมูล 'coconut' เราอาจจะข้าม element บาง element ได้ด้วยการไม่ใส่ชื่อตัวแปร เช่น
list($x,,$y) = $a;
จะข้าม element ที่สองของ array $a ดังนั้นตัวแปร $x และ $y จะมีข้อมูล 'apple' และ
'coconut' ตามลำดับ
WEB PROGRAMMING
Using PHP. and MySQL.106 106

3 ฟังก์ชันเกี่ยวกับข้อมูล String
ฟังก์ชันเกี่ยวกับข้อมูลชนิด string ในภาษา PHP แบ่งออกเป็นกลุ่มต่างๆ และมีรายละเอียดของฟังก์ชันที่ใช้ประโยชน์กันโดยทั่วไปดังนี้

3 1) ฟังก์ชันที่ให้ข้อมูลจากข้อความ
• int strlen(string str)
ฟังก์ชันที่ให้ตัวเลขความยาวของข้อความที่อยู่ใน str เป็นจำนวนอักขระ เช่น strlen
("abcdef"); จะได้ค่า 6 คือมีอักขระจำนวน 6 ตัว การใช้งานอาจจะใช้เพื่อตรวจสอบความยาวของ
ข้อความที่ผู้ใช้ป้อน เช่น password หากมีจำนวนอักขระน้อยหรือมากกว่าที่กำหนดจะให้พิมพ์เข้า
ใหม่ เป็นต้น
ตัวอย่างการใช้งาน (การรับข้อมูลจากผู้ใช้และตัวแปร $_POST[ ] ดูรายละเอียดในบทที่ 4)

<?php
define('PWD_MIN',4);
define('PWD_MAX',8);
function isBetween ($val, $min, $max) {
return ($val>=$min && $val<=$max);
}
$pwlen = strlen($_POST['password']);
if (!isBetween($pwlen, PWD_MIN, PWD_MAX))
echo "Password length must be 4-8 characters";
else
echo "Password OK.";
?>

      • string substr(string str, int offset, int length)
      ฟังก์ชันนี้จะให้บางส่วนของข้อความจาก str โดยเริ่มตั้งแต่ตำแหน่งที่ระบุใน offset(ตำแหน่งของอักขระแรกสุดคือ 0) เป็นจำนวนความยาวตามที่ระบุใน length เช่น substr("abcdefghi",3,4) จะได้ข้อความ "defg" เป็นต้น หากค่า offset เป็นค่าลบ จะนับย้อนจากท้ายข้อความ เช่น substr("abcdefghi",-3,2) จะได้ "gh" เป็นต้น หากข้อความที่มีใน str น้อยกว่าที่ระบุใน offset และ length จะให้ข้อความเท่าที่มีใน str เท่านั้น เช่น substr("abcdefghi",6,4)จะได้ข้อความ "ghi" เป็นต้นหาก length เป็นค่าลบ หมายถึงจำนวนอักขระที่จะหยุดไม่นำมาเป็นผลลัพธ์นับจากท้ายข้อความ เช่น

<?php
$rest = substr("abcdef", 0, -1); // returns "abcde"
$rest = substr("abcdef", 2, -1); // returns "cde"
$rest = substr("abcdef", 4, -4); // returns ""
$rest = substr("abcdef", -3, -1); // returns "de"
?>

     • string trim (string str [, string charlist])
     ให้ผลลัพธ์เป็นข้อความจาก str ที่ตัด whitespace ที่อยู่ด้านหน้าและด้านหลังของ
ข้อความออกแล้ว เช่น trim(" vwxyz ") จะได้ "vwxyz" เป็นต้น อักขระที่ถือว่าเป็น whitespace
ได้แก่
o " " คือช่องว่าง
o "\t" เครื่องหมาย tab.
o "\n" เครื่องหมายขึ้นบรรทัดใหม่ new line (line feed).
o "\r" เครื่องหมาย carriage return.

บทที่ 3
     ฟังก์ชันมาตรฐานของภาษา PHP.107
o "\0" อักขระ NUL (ASCII 0)
o "\x0B" เครื่องหมาย vertical tab.
    นอกจากนี้ยังสามารถกำหนดรายการของอักขระที่จะตัดออกได้เองแทนอักขระwhitespace ที่กำหนดข้างต้นด้วยโดยกำหนดอักขระที่ต้องการให้ตัดทุกตัวใน charlist เช่น ".\t "เป็นการกำหนดว่าให้ตัดอักขระ . และ \t (tab) และ space ที่หัวและท้าย และสามารถใช้ .. เพื่อกำหนดช่วงของอักขระที่ต้องการตัดออกได้เช่น trim($st,"\x00..\x1F") กำหนดให้ตัดอักขระควบคุมที่มีรหัส ASCII ตั้งแต่ 00 ถึง 1F ออกทั้งหมด เป็นต้น

     • string ltrim (string str [, string charlist])
ให้ผลลัพธ์เป็นข้อความจาก str ที่ตัด whitespace หรืออักขระที่กำหนดใน charlist ที่อยู่ด้าน
หน้า (ทางซ้าย) ของข้อความออก เช่น ltrim(" vwxyz ") จะได้ "vwxyz " เป็นต้น (อักขระ
whitespace และการกำหนด charlist ทำได้เหมือนกับฟังก์ชัน trim( ))

    • string rtrim (string str [, string charlist])
    • string chop (string str [, string charlist])
     ให้ผลลัพธ์เป็นข้อความจาก str ที่ตัด whitespace หรืออักขระที่กำหนดใน charlist ที่อยู่ด้านหลังของข้อความออกแล้ว เช่น rtrim(" vwxyz ") จะได้ " vwxyz" เป็นต้น (อักขระ whitespaceและการกำหนด charlist ทำได้เหมือนกับฟังก์ชัน trim( ))กลุ่มฟังก์ชันที่ให้ข้อความที่เปลี่ยนอักษรตัวใหญ่-เล็ก (upper/lower case) ของภาษาอังกฤษในข้อความ มี 4 ฟังก์ชันได้แก่
     • string strtolower (string str) เปลี่ยนเป็นอักษรตัวเล็ก เช่น strtolower("ABc X2") จะได้
ข้อความ "abc x2" เป็นต้น
      • string strtoupper (string str) เปลี่ยนเป็นอักษรตัวใหญ่ เช่น strtoupper("xod2-je") จะ
ได้ข้อความ "XOD2-JE" เป็นต้น
      • string ucwords (string str) เปลี่ยนเป็นอักษรตัวใหญ่ที่ตัวอักษรแรกของคำ ฟังก์ชันนี้จะไม่
เปลี่ยนแปลงตัวอักษรตัวอื่นๆ หากตัวอื่นๆ เป็นตัวใหญ่ก็จะไม่เปลี่ยนให้เป็นตัวเล็ก หากต้องการ
ตัวใหญ่เฉพาะตัวแรกให้ใช้ฟังก์ชัน strtolower( ) ร่วมกับ ucwords( ) เช่น ucwords
(strtolower($str)) เพื่อแปลงข้อความทั้งหมดให้เป็นตัวเล็กก่อนแล้วจึงแปลงอักษรตัวแรกของ
คำให้เป็นตัวใหญ่
      • string ucfirst (string str) เปลี่ยนตัวอักษรแรกของข้อความเป็นอักษรตัวใหญ่ (ฟังก์ชันนี้จะ
ไม่เปลี่ยนแปลงตัวอักษรตัวอื่นๆ หากตัวอื่นๆ เป็นตัวใหญ่ก็จะไม่เปลี่ยนให้เป็นตัวเล็ก)
      • string str_repeat ( string input, int multiplier)
ฟังก์ชันนี้จะสร้างข้อความโดยทำซ้ำข้อความจาก input เป็นจำนวน multiplier ครั้ง เช่น
$st = str_repeat("= ", 10);
$pws = str_repeat("*", strlen($pwd));
ในตัวแปร $st จะมีข้อความ "= = = = = = = = = = " อยู่ภายใน ส่วน $pws จะมีตัว *
เป็นจำนวนเท่ากับความยาวของข้อความที่อยู่ในตัวแปร $pwd เป็นต้น

     • string str_pad ( string input, int pad_length [, string pad_string [, int
pad_type]])
      ฟังก์ชันนี้จะให้ข้อความที่เติมช่องว่างหรือข้อความที่ต้องการที่ระบุใน pad_string เข้าไปที่ด้านหน้าหรือต่อท้ายข้อความใน input เพื่อให้มีความยาวของข้อความภายในผลลัพธ์ครบจำนวน pad_length ตัว การเติมสามารถทำได้ทั้งด้านหน้าหรือที่ท้ายข้อความระบุโดย pad_typeo หากไม่ระบุ pad_string จะใช้ช่องว่างเพื่อเติมข้อความo pad_type เป็นการระบุการเติมจะเติมอย่างไร โดยมี STR_PAD_RIGHT เติมต่อท้ายหรือทางขวาของข้อความ, STR_PAD_LEFT เติมด้านหน้าหรือทางซ้ายของข้อความ,STR_PAD_BOTH เติมทั้งด้านหน้าและต่อท้าย หากไม่ระบุ pad_type จะเติมที่ท้ายหรือด้านขวาของข้อความ

   o หาก pad_length มีค่าเป็นลบหรือมีค่าน้อยกว่าความยาวข้อความใน input จะไม่มีการ
เติมข้อความเพิ่มเข้าไป
    o ข้อความที่ระบุใน pad_string จะใช้เติมจนกระทั่งได้ข้อความที่ยาวครบตามที่ระบุใน
pad_length เท่านั้น
ตัวอย่าง
str_pad ("abc",8) จะได้ "abc "
str_pad ("abc",8, ".", STR_PAD_LEFT) จะได้ ".....abc"
str_pad ("abc",8, "-",STR_PAD_BOTH) จะได้ "--abc---"
str_pad ("abc",8, "!?!#") จะได้ "abc!?!#!"
     • string str_shuffle ( string str)
ฟังก์ชัน str_shuffle จะให้ผลเป็นข้อความที่ทำการสับเปลี่ยนลำดับของอักขระต่างๆ ที่อยู่
ใน str โดยการสุ่ม เช่น str_shuffle("macintosh powerbook G4") จะได้ข้อความที่สลับลำดับ
ของอักขระต่างๆ อย่างสุ่ม เช่นอาจได้เป็น "whGtoombnorea4k si ocp" เป็นต้น

   • string strtok ( string arg1, string arg2)
strtok() จะทำการแยกข้อความจาก arg1 เป็นข้อความย่อยโดยใช้อักขระจาก arg2 เป็น
ตัวแยกข้อความ และหากมีการเรียกใช้ฟังก์ชันนี้อีกด้วย argument เพียงตัวเดียวเป็น arg2 จะ
ทำการแยกข้อความย่อยลำดับถัดไปจากข้อความเดิม ตัวอย่างเช่นการดึงคำแต่ละคำออกจาก
ประโยคในภาษาอังกฤษ สามารถใช้ฟังก์ชัน strtok( ) โดยระบุเครื่องหมาย whitespace เป็นตัว
แยกข้อความแสดงตัวอย่างได้ดังนี้

1 <?php
2 $string = "This is\tan example\nstring";
3 /* Use tab and newline as tokenizing characters as well */
4 $tok = strtok($string, " \n\t");
5 while ($tok) {
6 echo "Word=$tok<br />";
7 $tok = strtok(" \n\t");
8 }
9 ?>

    จากตัวอย่าง การเรียกใช้ strtok( ) ในบรรทัดที่ 4 จะระบุ argument ทั้งสองตัวเริ่มต้น
ครั้งแรก และในการวนรอบคำสั่งในบรรทัดที่ 7 จะใช้ strtok( ) เพื่อดึงข้อความลำดับถัดไปซึ่งจะ
ระบุ argument เป็นตัวคั่นข้อความเพียง argument เดียว หากต้องการแยกข้อความอื่นก็สามารถ
ใช้ strtok( ) โดยระบุ argument สองตัว
ตัวอย่าง

<?php
$dataline = "23546,Tim Berton:100-555-478";
$uid = strtok($dataline,",:");
$uname = strtok(",:");
$ucode = strtok(",:");
?>

    ตัวอย่าง $addr = strtr($addr, "ฃฅ", "ขค")
หากเรียกใช้ฟังก์ชัน strtr( ) โดยมี argument เพียงสองตัว ใน argument ตัวที่สองจะกำหนดเป็น associative array ที่ใช้ key เป็นข้อความเดิมและ value เป็นข้อความใหม่ที่จะแทนการแทนจะตรวจสอบข้อความที่ตรงกับ key ที่ยาวที่สุดก่อน และข้อความส่วนที่ถูกแปลงไปแล้วจะไม่ตรวจสอบกรณีอื่นอีก ตัวอย่างเช่น

<?php
$trans = array("hello" => "hi", "hi" => "hello");
$res = strtr("hi all, I said hello", $trans);
?>

จะได้ตัวแปร $res มีข้อความ "hello all, I said hi"
      • int substr_count ( string haystack, string needle)
ฟังก์ชัน substr_count() จะแสดงจำนวนข้อความ needle ที่พบอยู่ในข้อความ haystack
ตัวอย่างเช่น substr_count("This is a test", "is") จะได้ค่า 2 คือพบคำว่า "is" 2 ครั้ง

  3 2) การแสดงผลข้อความ
    • void echo string args
     เป็นคำสั่งแสดงผลข้อความที่ได้กล่าวถึงมาในบทที่ 2 แล้ว มีลักษณะเป็นคำสั่งพิเศษที่เรียก
ว่า language construct ไม่จำเป็นต้องมีวงเล็บครอบ argument และมีจำนวน argument ที่เป็น
stringได้หลายตัวคั่นโดย comma รายละเอียดจะกล่าวถึงอีกครั้งในหัวข้อ 4.1 ในบทที่ 4
     • int print ( string arg)
    ฟังก์ชันแสดงผลข้อความ จะกล่าวถึงรายละเอียดอีกครั้งในหัวข้อ 4.1 บทที่ 4
     • void printf ( string format [, mixed args])
     คำสั่ง printf ( ) เป็นคำสั่งแสดงผลออกไปยัง browser ตามรูปแบบที่กำหนด เหมือน
ฟังก์ชัน printf( ) ในภาษา C/C++, Java เป็นคำสั่งที่เป็น language construct รายละเอียดของ
คำสั่งนี้กล่าวถึงอยู่ในหัวข้อ 4.1 ของบทที่ 4
     • string sprintf ( string format [, mixed args])
ฟังก์ชัน sprintf( ) ให้ผลข้อความที่ถูกจัดรูปแบบตามรูปแบบที่ระบุ การกำหนดรูปแบบ
เหมือนกับคำสั่ง printf( ) รายละเอียดของคำสั่งนี้แสดงอยู่ในหัวข้อ 4.1 ของบทที่ 4
WEB PROGRAMMING
Using PHP. and MySQL.110 110
      • void vprintf ( string format, array args)
ฟังก์ชัน vprintf( ) เป็นฟังก์ชันที่ใช้แสดงผลข้อมูลใน array ตามรูปแบบที่กำหนดใน format
เหมือนกับคำสั่ง printf( ) แต่จะนำข้อมูลใน array มาใช้แทนการกำหนดตัวแปรหลายตัวใน argument

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

การส่งค่าออกจากฟังก์ชันใช้คีย์เวิร์ด 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
ที่มา www.widebase.net

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

การประกาศฟังก์ชันเริ่มต้นด้วยคีย์เวิร์ด 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 ได้รับการเรียก " บน browser

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

สิ่งสำคัญมากในการพิจารณาเมื่อตั้งชื่อฟังก์ชันคือชื่อต้องสั้นแต่มีความหมาย ถ้าฟังก์ชันสร้างส่วนตัวของเพจควรตั้งชื่อเป็น 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();

?>
ที่มา www.widebase.net

2 พ.ย. 2557

การออกแบบฐานข้อมูล

การออกแบบฐานข้อมูล (Designing Databases) มีความสำคัญต่อการจัดการระบบฐานข้อมูล (DBMS) ทั้งนี้เนื่องจากข้อมูลที่อยู่ภายในฐานข้อมูลจะต้องศึกษาถึงความสัมพันธ์ของข้อมูล โครงสร้างของข้อมูลการเข้าถึงข้อมูลและกระบวนการที่โปรแกรมประยุกต์จะเรียกใช้ฐานข้อมูล ดังนั้น เราจึงสามารถแบ่งวิธีการสร้างฐานข้อมูลได้ 3 ประเภท

       1. รูปแบบข้อมูลแบบลำดับขั้น หรือโครงสร้างแบบลำดับขั้น (Hierarchical data model) วิธีการสร้างฐาน ข้อมูลแบบลำดับขั้นถูกพัฒนาโดยบริษัท ไอบีเอ็ม จำกัด ในปี 1980 ได้รับความนิยมมาก ในการพัฒนาฐานข้อมูลบนเครื่องคอมพิวเตอร์ขนาดใหญ่และขนาดกลาง โดยที่โครงสร้างข้อมูลจะสร้างรูปแบบเหมือนต้นไม้ โดยความสัมพันธ์เป็นแบบหนึ่งต่อหลาย (One- to -Many)

       2. รูปแบบข้อมูลแบบเครือข่าย (Network data Model) ฐานข้อมูลแบบเครือข่ายมีความคล้ายคลึงกับฐาน ข้อมูลแบบลำดับชั้น ต่างกันที่โครงสร้างแบบเครือข่าย อาจจะมีการติดต่อหลายต่อหนึ่ง (Many-to-one) หรือ หลายต่อหลาย (Many-to-many) กล่าวคือลูก (Child) อาจมีพ่อแม่ (Parent) มากกว่าหนึ่ง สำหรับตัวอย่างฐานข้อมูลแบบเครือข่ายให้ลองพิจารณาการจัดการข้อมูลของห้องสมุด ซึ่งรายการจะประกอบด้วย ชื่อเรื่อง ผู้แต่ง สำนักพิมพ์ ที่อยู่ ประเภท

       3. รูปแบบความสัมพันธ์ข้อมูล (Relation data model) เป็นลักษณะการออกแบบฐานข้อมูลโดยจัดข้อมูลให้อยู่ในรูปของตารางที่มีระบบคล้ายแฟ้ม โดยที่ข้อมูลแต่ละแถว (Row) ของตารางจะแทนเรคอร์ด (Record) ส่วน ข้อมูลนแนวดิ่งจะแทนคอลัมน์ (Column) ซึ่งเป็นขอบเขตของข้อมูล (Field) โดยที่ตารางแต่ละตารางที่สร้างขึ้นจะเป็นอิสระ ดังนั้นผู้ออกแบบฐานข้อมูลจะต้องมีการวางแผนถึงตารางข้อมูลที่จำเป็นต้องใช้ เช่นระบบฐานข้อมูลบริษัทแห่งหนึ่ง ประกอบด้วย ตารางประวัติพนักงาน ตารางแผนกและตารางข้อมูลโครงการ แสดงประวัติพนักงาน ตารางแผนก และตารางข้อมูลโครงการ


การออกแบบฐานข้อมูลเชิงสัมพันธ์

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

        1.การรวบรวมและวิเคราะห์ความต้องการในการใช้ข้อมูล

        2.การเลือกระบบจัดการฐานข้อมูล

        3.การออกแบบฐานข้อมูลในระดับแนวคิด

        4.การนำฐานข้อมูลที่ออกแบบในระดับแนวคิดเข้าสู่ระบบจัดการฐานข้อมูล

        5.การออกแบบฐานข้อมูลในระดับกายภาพ

        6.การนำฐานข้อมูลไปใช้และการประเมินผล


การออกแบบฐานข้อมูลในระดับตรรกะ

       การออกแบบฐานข้อมูลในระดับตรรกะ หรือในระดับแนวความคิด เป็นขั้นตอนการออกแบบความสัมพันธ์ระหว่างข้อมูลในระบบโดยใช้แบบจำลองข้อมูลเชิงสัมพันธ์ ซึ่งอธิบายโดยใช้แผนภาพแสดงความสัมพันธ์ระหว่างข้อมูล (E-R Diagram) จากแผนภาพ E-R Diagram นำมาสร้างเป็นตารางข้อมูล (Mapping E-R Diagram to Relation) และใช้ทฤษฏีการ Normalization เพื่อเป็นการรับประกันว่าข้อมูลมีความซ้ำซ้อนกันน้อยที่สุด ซึ่งการออกแบบเชิงตรรกะนี้จะบอกถึงรายละเอียดของ Relation , Attribute และ Entity

ระบบฐานข้อมูล

สถาปัตยกรรม
       สถาปัตยกรรมฐานข้อมูล ประกอบด้วย 3 ระดับ คือ ระดับภายนอก, ระดับแนวคิด และ ระดับภายใน โดยทั้ง 3 ระดับ จะถูกแบ่งแยกออกจากกันโดยชัดเจน ซึ่งทั้ง 3 ระดับเป็นลักษณะสำคัญหลักๆ ของแบบจำลองฐานข้อมูลเชิงสัมพันธ์ ที่นิยมนำมาใช้กับฐานข้อมูลในยุคศตวรรษที่ 21

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

ระบบจัดการฐานข้อมูล
        ระบบจัดการฐานข้อมูล (DBMS) ประกอบด้วยซอฟต์แวร์ที่ใช้ในการจัดการฐานข้อมูล, จัดเตรียมพื้นที่ในการเก็บ, การเข้าถึง, ระบบรักษาความปลอดภัย, สำรองข้อมูล และสิ่งอำนวยความสะดวกอื่นๆ ระบบจัดการฐานข้อมูลสามารถแบ่งหมวดหมู่ได้ตามแบบจำลองฐานข้อมูลที่สนับสนุน อาทิเช่น เชิงสัมพันธ์ หรือ XML เป็นต้น แบ่งตามประเภทของคอมพิวเตอร์ที่สนับสนุน อาทิเช่น server cluster หรือ โทรศัพท์พกพา เป็นต้น แบ่งตามประภทของภาษาสอบถามที่ใช้ในการเข้าถึงฐานข้อมูล อาทิเช่น ภาษาสอบถามเชิงโครงสร้าง หรือ XQuery แบ่งตามประสิทธิภาพในการ trade-offs อาทิเช่น ขนาดที่ใหญ่ที่สุด หรือ ความเร็วสูงสุด หรือ อื่นๆ เป็นต้น ในบาง DBMS จะครอบคลุมมากกว่าหนึ่งหมวดหมู่ เช่น สนับสนุนภาษาสอบถามได้หลายๆ ภาษา ยกตัวอย่างเช่น ใน DBMS ที่นิยมใช้การอย่างแพร่หลาย MySQL, PostgreSQL, Microsoft Access, SQL Server, FileMaker,Oracle,Sybase, dBASE, Clipper,FoxPro อื่นๆ ในทุกๆ ซอฟต์แวร์ฐานข้อมูลจะมี Open Database Connectivity (ODBC) driver มาให้ด้วย เพื่ออนุญาตให้ฐานข้อมูลสามารถทำงานร่วมกับฐานข้อมูลแบบอื่นๆ ได้