Latest Posts

ตอนที่ 1 : รู้จักกับ Android คืออะไร ? จะเขียนโปรแกรมบนแอนดรอยด์จะต้องติดตั้ง Software อะไรบ้าง

55



รู้จักกับ Android คืออะไร ? จะเขียนโปรแกรมบนแอนรอยด์จะต้องติดตั้ง Software อะไรบ้าง ? - เป็นที่ทราบกันดีแล้วว่า Android ได้รับความนิยมมากที่สุดในบรรดา OS ที่ถูกติดตั้งบน SmartPhone หรือ Tablets ในรุ่นต่าง ๆ ที่ออกสู่ท้องตลาดในปัจจุบัน ดังนั้นจะไม่ขออธิบายรายละเอียดมากว่า Android คืออะไรมีประวัติอะไร Android เป็น OS ที่เป็น Open Source ของค่าย Google ออกมาเมื่อประมาณปี 2006 ที่ทำงานบน SmartPhone หรือ Tablets ทำหน้าที่ควบคุมอุปกรณ์ต่าง ๆ ร่วมกับ App ที่พัฒนาขึ้นบน Android นั่นเอง Android เป็น OS ที่มาทำตลาดแข่งขันกับ iOS ของค่าย Apple และในขณะนี้ Android ก็ได้แซงล้ำหน้า iOS เป็นที่เรียบร้อยแล้ว (จำนวนผู้ใช้งาน) อันเนื่องจากเป็น Open Source ที่สามารถใช้งานได้ฟรี และติดตั้งได้กับ SmartPhone หรืออุปกรณ์ได้หลากหลาย และนัก Developer ทั้งหลาย สามารถพัฒนา Application บน Android ด้วยLaptop / Notebook หรือ PC Desktop ธรรมดา อีกทั้งยังสามารถพัฒนาบนเครื่อง Mac ได้เช่นเดียวกัน จึงได้เกิดนักพัฒนาขึ้นมากมาย ซึ่งตรงกันข้ามกับ iOS ที่สามารถใช้ได้กับเครื่องของ Apple เท่านั้น และการพัฒนาโปรแกรมก็จะต้องทำบนเครื่อง Mac ในปัจจุบัน Android มี App หลายล้าน App (ที่อยู่ใน Play Store) ทั้งที่สามารถดาวน์โหลดได้ใช้งานได้ หรือเสียเงินซื้อ Android กำลังได้รับความนิยมจากองค์กรธุรกิจจำนวนมายที่นำ Application เหล่านี้มาใช้งาน่วมกับธุรกิจหลาย ๆ ประเภท เพราะฉะนั้นการที่จะหันมาศึกษา Android ก็เป็นทางเลือกหนึ่งที่จะช่วยส่งเสริมความรู้ความสามารถในการเขียนโปรแกรมได้เช่นเดียวกัน


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

Read More

สอน Swift ตอนที่ 1 ทำความรู้จักภาษา Swift

55
Swift programming language


 Swift คือ ภาษาเขียนโปรแกรมที่ใช้งานง่ายแต่ทรงพลัง ออกแบบและสร้างสรรค์โดย Apple เพื่อใช้สร้างแอพพลิเคชั่นสำหรับ IOS, Mac, Apple TV และ Apple Watch ซึ่ง Apple บอกว่าออกแบบมาเพื่อให้นักพัฒนามีอิสระยิ่งกว่าที่เคย นอกจากนี้ Swift ยังใช้งานง่ายและเป็นโอเพ่นซอร์ส (Opensource) 


Swift ใช้สร้างแอพพลิเคชั่นสำหรับอะไร?
IOS (IPhone, IPad)

OSX (Mac)

tvOS (Apple TV)
watchOS (Apple Watch)

ภาษา Swift มีความนิยมมากน้อยแค่ไหน ?
Swift เปิดตัวเมื่อปี 2014 ความนิยมค่อยๆ เพิ่มขึ้น สวนทางกับ Objective-C ที่ค่อยๆ ลดลง จากความตั้งใจของ Apple ที่ต้องการให้ Swift มาแทน ในปี 2015 Swift ปรับปรุงเป็น Swift 2.0 และเปิดให้เป็นโอเพ่นซอร์ส ความนิยมเพิ่มมากขึ้นจนมาติด 1 - 20 ภาษาเขียนโปรแกรมที่นิยมมากที่สุด 

ประสิทธิภาพละเป็นยังไงบ้าง?

แอพที่เขียนด้วย Swift 2.0 นั้นทำงานได้รวดเร็วสมชื่อ 

เร็วกว่า Objective-C สูงสุด 2.6 เท่า
เร็วกว่า Python 2.7 สูงสุด 8.4 เท่า ..... ไม่ได้วัดเองครับ Apple เขาวัดมาให้ http://www.apple.com/th/swift/

แอพที่เขียนด้วย Swift 3.0 

รออัพเดทจากทาง Apple เร็วๆ นี้ครับ

เครื่องมือสำหรับใช้ในการเขียนแอพพลิเคชั่น?
การเขียนแอพพลิเคชั่นบน Platform ของ Apple ใช้ XCode ในการพัฒนาเป็นส่วนใหญ่ เพียงเราดาวโหลด XCode ผ่านจาก App Store ก็สามารถพัฒนาได้เลย โดยไม่จำเป็นต้องติดตั้งหลายอย่างเหมือนภาษาอื่นๆ วิธีการติดตั้ง Xcode เครื่องมือสำหรับนักพัฒนา Application บน IOS, OS X แบบ Step By Step

XCode


แอพเยี่ยมๆ ที่สร้างด้วยภาษา Swift
เมื่อติดปัญหาไม่ต้องกลัวเพราะมีชุมชนสำหรับนักพัฒนา Swift เพื่อให้แลกเปลี่ยนความรู้กันได้ที่ Swift.org

Read More

กรองข้อมูลด้วย JQuery plugin for input text field filtering

55

This is simple JQuery plugin for filtering text input field by using regexp. Only allowed characters will be inserted into input field, others will be silently dropped.

Usage example

// only lowercase alphabets are allowed
$('#text_input').filter_input({regex:'[a-z]'}); 

// only numbers are allowed
$('#text_input').filter_input({regex:'[0-9]'}); 

// only URL safe characters are allowed
$('#text_input').filter_input({regex:'[a-zA-Z0-9_]'}); 

// use live() for binding to elements - from version 1.1.0
$('.input').filter_input({regex:'[a-z]', live:true}); 

// use callback function "feedback" when key test is negative - from version 1.3.0
$('.input').filter_input({
regex:'[a-z]',
feedback: function(char) {

// "this" contains a reference to the inputfield
alert('character ' + char + ' is not allowed in input ' + $(this).attr('id'));
}
}); 


// filter now supports also "paste" event, enabled by default - from version 1.4.2
$('.input').filter_input({
regex:'[a-z]',
events:'keypress paste'
});

Download


Read More

HTML5 Application กับ WebSockets และ Web Workers

55

คราวนี้เรามาเริ่มการใช้ HTML5 เพื่อใช้ในการเขียน application จริงๆ จังๆ ซักทีแล้วนะครับ เป็นส่วนเริ่มต้นในการใช้เพื่อทำเกมครับ

Web Socket
สำหรับคนที่เคยเขียนโปรแกรมแบบ Client-Server นั้น จะค่อนข้างคุ้นเคยกับคำว่า Server Socket ซึ่งเป็นการเปิด port ที่ Server เป็น TCP ซึ่ง client ก็ติดต่อโดยอ้างถึง ip ของ Server และ Port และทำการเชื่อมการติดต่อเพิ่มเริ่มส่งข้อมูล

ซึ่ง Web Socket ก็สร้างขึ้นมาจากไอเดียนั้นเช่นเดียวกัน แต่การติดต่อนั้นเชื่อมผ่าน URI แทน ในการติดต่อจะมีการ upgrade connection จากธรรมดาเป็น upgrade ซึ่งทำให้สามารถติดต่อแบบ stateful หรือ รับส่งได้พร้อมกันได้


ซึ่งมีจุดเด่นในด้านการที่เป็น stateful เพราะทำให้ client กับ server ติอต่อกันได้ตลอดเวลา โดยไม่จำเป็นต้อง polling เพื่อเช็คว่ามีข้อมูลรึยัง แต่จะส่งเมื่อมีข้อมูลจริงๆ นั่นเองครับ


ตัวอย่างโค้ด


var socket = new WebSocket(ws://websockets.org:8787/echo);
socket.onopen = function(evt) { console.log("Socket opened");};
socket.onclose = function(evt) {console.log("Socket closed");};
socket.onmessage = function(evt){console.log(evt.data);};
socket.onerror = function(evt) {console.log("Error: "+evt.data);};
socket.send("Hello World!");


จากโค้ดเป็นการสร้าง WebSocket เพื่อไว้สำหรับคุยกับ echo server และมีการกำหนด callback function เมื่อเกิดเหตุการณ์ต่างๆ เช่น opened, closed, receive a message, หรือแม้กระทั่งเมื่อเกิด error ขึ้น จากนั้นเราก็ส่งค่า Hello World! ไปยัง server และให้ browser แสดงคำว่า Hello World จากการรับค่ากลับจาก server ครับ


ซึ่ง Server ของ WebSocket หากลองค้นหาดูแล้ว จะพบว่ามีการ implement เป็นหลายภาษาอย่างแพร่หลายแล้วครับ หาหยิบจับมาใช้ได้เช่น


Web Worker
Web Worker เด๋วมาดูโค้ด demo กันก่อนนะครับจะได้เข้าใจมากขึ้น ผมจะเขียนโด้ดในการแสดงเวลาปัจจุบันนะครับ


// demo1.html
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Web Worker example</title>
</head>
<body>
<p>The time is now: <span id="result" /></p>
<script>
var worker = new Worker('worker.js');
worker.onmessage = function (event) {
document.getElementById('result').innerText = event.data;
};
</script>
</body>
</html>


---------------------------------------


// worker.js
setInterval(function() {
postMessage(new Date());
}, 2000);


Web Worker รับค่าเป็น javascript file เพื่อเป็นตัวกำหนดการทำงานนะครับ var worker = new Worker('worker.js');


worker.js เป็น function การทำงานจริงๆ ครับ ซึ่งเราสั่งให้ setInterval ทุกๆ 2 วินาที และให้ทำการ postMessage(new Date()) ซึ่งเป็นการส่งค้าให้กับ Worker ที่อยู่ในหน้าหลักที่สร้าง listener method onmessage ไว้ เพื่อให้แสดงข้อมูลวันที่ครับ


listener ของ Web Worker
- onmessage ซึ่งใช้สำหรับการรับข้อมูลที่ส่งจาก postMessage
- onerror ใช้ในการรับ ข้อมูล error ครับ
ตัวอย่าง worker.onerror = function errorHandler(e) {
console.warn(e.message, e);
}


และการปิด Web Worker เราสามารถทำได้โดยเรียกฟังก์ชั่น worker.terminate(); ครับ
การใช้งาน Web Worker ทางที่ดียังไงก็ควรที่จะใช้ setInterval หรือ sleep ไว้ครับ ไม่งั้น cpu จะกินเยอะมากและเครื่องอาจจะค้างได้ครับ


ประเภทของ Web Worker
- Inline Worker คือใช้สำหรับหน้าเดียว ก็คือตามตัวอย่างนั่นเองครับ
worker = new Worker('worker.js');


- Shared Worker คือใช้ร่วมกันหลายหน้า เพื่อให้หลายหน้ามีการแสดงข้อมูลที่ตรงกันได้
sharedWorker = new SharedWorker(sharedEchoWorker.js');



วิธีรัน example นี้ 
เนื่องจาก worker ใช้ postMessage ซึ่งเด๋วเราจะได้เจอกันอีกเยอะเลยครับ ซึ่งมีข้อจำกัดอยู่ที่ว่าต้องอยู่ใน domain เดียวกันเท่านั้น หากเราสร้างไฟล์และรันบน browser เลยจะเกิด security error ขึ้นครับ ถ้าจะทดสอบให้ใส่ใน appserv แล้วรันผ่าน localhost ครับ และจะเห็นการแสดงเวลาอย่างสวยงามครับ


ความรู้จาก Addison Wesley Learning HTML5 Game Programming Sep 2011 และ Pro HTML5


ผลลัพธ์ครับ
Read More

การติดต่อฐานข้อมูล MySQL

55
หลังจากบทที่แล้วเราติดตั้งฐานข้อมูล MySQL เสร็จเรียบร้อยแล้ว และทำให้ใช้งานร่วมกับ PHP ได้แล้ว ทีนี้เราจะเริ่มใช้งานมันได้ยังไง เดี๋ยวมาดูกันครับ
การติดต่อ MySQL จาก PHP จากที่เคยทำมามันก็มี 2 วิธีหลักๆ คือ ติดต่อโดยตรงโดยผ่าน Native Driver ที่มาพร้อมกับ PHP เลย กับอีกวิธีคือใช้ PDO (PHP Data Object) จริงๆ ผมไม่อยากเรียก PDO ว่าเป็น Native Driver เท่าไหร่ เพราะมันติดต่อฐานข้อมูลได้หลายแบบเหลือเกิน แต่ในเว๊ปของ MySQL บอกไว้แบบนั้นงะ
ลำดับการทำงานของทั้งสองขั้นตอนจะคล้ายๆ กันคือ
      สร้างการเชื่อมต่อกับ MySQL
      ติดต่อกับฐานข้อมูลที่จะใช้งาน
      ปิดการเชื่อมต่อกับ MySQL
ผมจะอธิบายรายละเอียดเฉพาะแบบแรกนะครับ ส่วนแบบที่สองจะให้ตัวอย่างแล้วอธิบายนิดหน่อย เพราะถ้าเข้าใจเรื่อง OOP แล้ว PDO มันไม่ยากเลย บางทีอ่านแค่ Class กับ Method ก็เอาไปใช้งานได้แหละ อีกอย่างเซิร์ฟเวอร์ที่เราเช่าบางทีไม่เปิดใช้งาน PDO ก็มี แอบเศร้าเลย
ขั้นตอนที่ 1 เชื่อมต่อฐานข้อมูล
ทำได้โดยใช้ฟังก์ชั่น mysql_connect โดยค่าทีต้องส่งจะมีสามค่าคือ
  • string Host (IP ของ MySQL ในกรณีที่อยู่ในเครื่องเดียวกันให้ใส่ localhost)
  • string MySQL username
  • string MySQL password
เขียนได้ตามตัวอย่างนี้
   mysql_connect("host""mysql_username""mysql_password");?>
ขั้นตอนที่ 2 ติดต่อกับฐานข้อมูลที่เราจะใช้งาน
โดยใช้คำสั่ง mysql_select_db โดยมีค่าที่ต้องใ่ส่คือ
  • string ชื่อฐานข้อมูล
  • link identifier (จะใส่หรือไม่ใส่ก็ได้)
เขียนได้ตามตัวอย่างนี้
   mysql_select_db("database", [$link]);?>
ขอเน้นนิดนึง 
ตรงที่ผมเขียนว่า $link ผมใส่ bucket ไว้หมายความว่า จะใส่หรือไม่ใส่ก็ได้ ใส่แล้วมันก็ไม่ได้ทำงานเร็วขึ้นหรือดีขึ้น แต่ผมแนะนำให้ใส่ทุกครั้ง และให้ทำจนเป็นนิสัยเลย... ทำไมอ่า เมื่อกี้ยังบอกว่า "ไม่ใส่ก็ได้" เลย คืองี้ครับ ถ้าหากเราทำงานกับฐานข้อมูลหลายๆ ตัว และอยู่คนละโฮส เอาง่ายๆ ถ้าต้องการติดต่อฐานข้อมูลในเครื่องเรา และเครื่องที่ทำงาน เราต้องเขียนการเชื่อมต่อสองครั้ง แล้วถ้าเราต้องการ query ล่ะ จะรู้ได้ไงว่าเอามาจากไหน มันก็เลยต้องมีตัวเชื่อมต่อเพื่อบอกว่าเราจะเอาจากเครื่องของเรา หรือจากเครื่องที่ทำงานไงครับ... 
แต่ถ้าเกิดเหตุการณ์ที่ต้องเอาฐานข้อมูลจากสองที่คนละโฮส เมื่อก่อนผมก็ทำแบบที่ผมว่าข้างบน แต่เดี๋ยวนี้เขียน XML นิดๆ หน่อยๆ สะดวกกว่าครับ อาจไม่เร็วเท่าต่อโดยตรง แต่ปลอดภัยกว่า
ขั้นตอนที่ 3 ปิดการเชื่อมต่อ
ในเมื่อมีการเชื่อมต่อแล้วก็ต้องทำการปิดการเชื่อมต่อด้วยสิ ถ้าหากรอ session ใน MySQL หมดแล้วให้มันตัดการเชื่อมต่อเองเดี๋ยวหน่วยความจำของเซิร์ฟเวอร์จะหมด เกลี้ยงเสียก่อน ถ้าหากเราใช้งานแค่คนเดียวก็ไม่เท่าไหร่ แต่เข้ามาสัก 1000 คน 1000 connections 1000 processes ถ้าไม่คืนหน่วยความจำให้หลังจากใช้งานเสร็จหน่วยความจำเท่าไหร่ก็ไม่พออ่ะ ครับ วิธีการคืนหน่วยความจำก็ง่ายๆ เลย
   mysql_close([$link]);?>
ผม ใส่ bucket อีกแล้ว คำสั่งนี้จะมีตัวที่เชื่อมต่อส่งเข้าไปด้วยหรือไม่ก็ได้ ถ้าหากเราส่งตัวเชื่อมต่อเข้าไป มันก็จะปิดตัวเชื่อมต่อตัวนั้น แต่ถ้าไม่ใส่เข้าไป มันจะปิดตัวเชื่อมต่อตัวล่าสุดที่ทำการสร้างการเชื่อมต่อ ... งง ไหมเนี่ย เอาเป็นว่า อย่างที่บอกอ่ะครับ ควรกำหนดตัวเชื่อมต่อให้เป็นนิัสัยเลย เวลาปิดจะได้กำหนดไปเลยว่าจะปิดตัวไหน

ทีนี้ลองเอามาใช้งานจริงกัน
ในฐานข้อมูล MySQL จะมีฐานข้อมูลชื่อ mysql อยู่แล้ว เราก็ลองเรียกดูข้อมูลผ่าน PHP ล่ะกัน แต่ อย่าไปแก้ไขอะไรมันนะครับ เดี๋ยวเจ้งเอา

   $connect mysql_connect("localhost""root""cmdevhub") or die("ติดต่อ MySQL ไม่ได้"); // เก็บการเชื่อมต่อไว้ที่ตัวแปร $connect
   
mysql_select_db("mysql"$connect) or die("ติดต่อฐานข้อมูลไม่ได้"); // ทำการติดต่อฐานข้อมูล

   
$SQLCom "select * from user"// สร้างคำสั่ง SQL เก็บไว้ในตัวแปรชื่อ $SQLCom
   
$query mysql_query($SQLCom$connect); // ทำการคิวรี่
   
$rs mysql_fetch_assoc($query); // เอาออกมาแค่แถวเดียวก็พอ
   
print_r($rs); // พิมพ์ออกหน้าจอ
   
mysql_close($connect); // ปิดการเชื่อมต่อ?>
ผลลัพท์ที่ได้ก็จะเป็นแบบนี้ 
 
ถ้าหากได้ผลลัพท์ประมาณนี้แสดงว่าคุณเชื่อมต่อกับฐานข้อมูลได้แล้วและ พร้อมจะเขียนโปรแกรมที่ใช้งานจริงได้แล้วทันที (ง่ายไหม) ส่วนคำสั่งอื่นๆ ยังไม่ต้องสนใจครับ เอาไว้มาคุยรายละเอียดกันทีหลัง
การเชื่อมต่อฐานข้อมูลเราต้องทำการเชื่อมต่อทุกครั้งในทุกๆ หน้าที่มีการเชื่อมต่อกับฐานข้อมูล (งงไหมเนี่ย) ตีความง่ายๆ คือ ถ้าหากมีไฟล์ในเว๊ปของเรา 100 ไฟล์ เราก็ต้องเขียนการเชื่อมต่อทั้ง 100 ไฟล์เลย เราขยันอยู่แล้ว ไม่ใช่ปัญหา แต่ปัญหาจะเกิดขึ้นทันทีเมื่อ เราเอางานของเราไปไว้ที่อื่น ตัวอย่างง่ายๆ ก็คือการอัพโหลไปไว้ในโฮส แน่นอนฐานข้อมูลต้องไม่ใช่ชื่อเดิม username และ password ก็ต้องเปลี่ยน ทีนี้เราก็ต้องไล่เปลี่ยนทั้ง 100 ไฟล์เลย สนุกสนานแน่นอน...
เพราะงั้นเรามาทำให้ชีวิตเราง่ายขึ้นดีกว่า จาก บทที่ 8 เรื่องฟังก์ชั่น (ดูจากข้างๆ หรือจิ้มที่ลิงค์เลย) เราสามารถเขียนฟังก์ชั่นครั้งเดียวแล้วเรียกใช้กี่ทีก็ได้ โอ้ว ทำไมช่างสะดวกเช่นนี้
ผมจะใช้วิธีสร้างไฟล์ขึ้นมาไฟล์หนึ่งเก็บฟังก์ชั่นไว้แล้วถ้าต้องการ ติดต่อฐานข้อมูลก็แค่ include เข้าไป (จะใช้ require ก็ได้ไม่ว่ากัน) จากนั้นก็เรียกฟังก์ชั่นติดต่อฐานข้อมูลเอา เท่านี้ก็เสร็จแล้ว ตัวอย่างตามนี้เลยครับ
   // ไฟล์ชื่อ function.inc.php

   
function connect() {
      global 
$connect;
      
$connect mysql_connect("localhost""root""cmdevhub") or die("ติดต่อ MySQL ไม่ได้");
      
mysql_select_db("mysql"$connect) or die("ติดต่อฐานข้อมูลไม่ได้");
   }

   function 
disconnect() {
      global 
$connect;
      
mysql_close($connect);
   }
?>
ไฟล์ function.inc.php สร้างไว้สำหรับ include อย่างเดียว มี 2 ฟังก์ชั้นคือ connect() และ disconnect()
   // ไฟล์ชื่อ testmysql.php

   
require_once('function.inc.php'); // อย่าลืมเอาไฟล์นี้ไว้ที่เดียวกันนะครับ
   
connect();
   
$SQLCom "select * from user";
   
$query mysql_query($SQLCom$connect);
   
$rs mysql_fetch_assoc($query);
   
print_r($rs);
   
disconnect();?>
ผล ลัพท์ที่ได้ก็เหมือนเดิมทุกอย่าง แต่ถ้าเราย้ายโฮสปุ๊ป ก็แค่ไปแก้ไข username และ password ในไฟล์ function.inc.php เท่านั้นเอง ไฟล์อื่นๆ เราไม่ต้องไปยุ่งอะไรกับมันเลย ชีวิตสบายขึ้นอีกเยอะเลย หุหุ 
ทำให้ดูเป็นมืออาชีพขึ้นหน่อยไหม
ในเมื่อ PHP สามารถเขียนเป็น OO ได้ (Object Oriented) ทำไมเราจะไม่เขียนให้มันเป็น OO หน่อยล่ะ หุหุ (เนื่องจากมันไม่มีอะไรมาก ผมไม่เอา Class Diagram ลงเนอะ มีแค่ 2 Class เอง)
เพื่อให้ (ดูเหมือน) เป็นมืออาชีพ เวลาผมเขียนโปรแกรมผมชอบที่จะแยกไฟล์สำหรับเก็บ Constant Variable, Class ไว้แยกกัน ก็เอาตามนี้เลยครับ
   // ไฟล์ชื่อ user.inc.php
  
   
define("DBHOST""localhost");
   
define("DBUSER""root");
   
define("DBPASS""cmdevhub");
   
define("DBNAME""mysql");?>


   // ไฟล์ชื่อ class.inc.php

   
require_once("user.inc.php");

   class 
mysql {
      private 
$connect;
      private 
$query;
      private 
$result;

      public function 
connect() {
         if(!
$this->connect mysql_connect(DBHOSTDBUSERDBPASS)) {
            echo 
get_class($this) . "::connect() Error Connect MySQL " mysql_error();
            return 
false;
         }
         else {
            if(!
mysql_select_db(DBNAME$this->connect)) {
               echo 
get_class($this) . "::connect Error Select Database " mysql_error();
               
mysql_query("set names utf8"$this->connect);
            }
         }
      }

      public function 
query($command) {
         if (!
$this->connect) {
            
$this->connect();
         }
         if (!
$this->query mysql_query($command$this->connect)) {
            echo 
get_class($this) . "::query() SQL Command invalid " mysql_error();
         }
         else {
            return 
$this->query;
         }
      }

      public function 
fetch_assoc($query '') {
         if (
$query == NULL) {
            
$result mysql_fetch_assoc($this->query);
         }
         else {
            
$result mysql_fetch_assoc($query);
         }
           
         if (
is_null($result)) {
            echo 
get_class($this) . "::fetch_assoc() Error fetch result";
         }
         else {
            return 
$result;
         }
      }
       
      public function 
num_rows($query '') {
         if (
$query == NULL) {
            return 
mysql_num_rows($this->query);
         }
         else {
            return 
mysql_num_rows($query);
         }
      }
       
      function 
__destruct() {
         if(
$this->connect) {
            
mysql_close($this->connect);
         }
      }
   }
?>
ไฟล์นี้ผมไม่ขออธิบายเนอะ ไว้ค่อยคุยกันวันหลัง แต่เป็นการเชื่อมต่อฐานข้อมูลที่ผมใช้งานจริงๆ อยู่อ่ะ (เอาไปใช้ได้นะ) 
วิธีการใช้งานก็ง่ายๆ แบบนี้เลยครับ
   require_once("class.inc.php");

   
$mysql = new mysql();
   
$SQLCom "select * from user";
   
$mysql->query($SQLCom);
   
$rs $mysql->fetch_assoc();
   
print_r($rs);?>
ง่าย ใช่ไหมครับ ตอนนี้เราโยนทุกอย่างให้เป็นหน้าที่ของคลาส mysql ส่งคำสั่งไปคิวรี่โดยไม่ต้องสร้างการเชื่อมต่อ โดยเมธอด query จะทำการตรวจสอบเองว่ามีการสร้างการเชื่อมต่อมาแล้วหรือยัง แล้วพอจบหน้าก็ไม่ต้องทำการตัดการเชื่อมต่อ destructor จะตัดการเชื่อมต่อเองโดยอัตโนมัติ (สบายเลย)

ส่วน PDO สามารถไปอ่านได้จากตรงนี้เลยครับ ไว้ค่อยมาอธิบายกันแบบลึกๆ อีกที
ตอนนี้เราสามารถนำข้อมูลออกมาจากฐานข้อมูล MySQL ได้แล้ว คราวหน้าเรามาลุยคำสั่ง SQL แบบเต็มๆ กันเลยดีกว่า ตอนนี้ก็ขอลากันเท่านี้แหละครับ
Read More