PHPPDO

Access Database PHP ด้วย PDO พื้นฐานต้องรู้ปี 2016

Access Database PHP แบบ PDO เป็นการเข้าถึง ฐานข้อมูลต่างๆ ให้สะดวกมากยิ่งขึ้น ในรูปแบบของ การเขียน OOP หรือแบบ Object ซึ่งมีความสามารถในการเชื่อมต่อฐานข้อมูล ได้หลากหลายรูปแบบ หลากหลาย Platform ในการเขียนครั้งเดียว ซึ่งเป็นสิ่งที่เรควรใช้ ในการเขียน PHP ยุคใหม่นี้ แต่เรากลับพบว่า ทักษะการเขียน เบื้องต้น หรือบทความที่มีการสอน เกี่ยวกับการใช้งาน กับยังเป็นการสอนในยุคเดิม เมื่อหลายปีก่อน บทความเหล่านั้น ยังคงวนเวียน มีพลังและไม่ทันสมัยสำหรับปี 2016

access database แบบ PDO เป็นเครื่องมือสำหรับติดต่อฐานข้อมูล

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

PDO เป็นคำย่อมาจาก PHP Database Objects ซึ่งถ้าเรานึกถึงเมื่อก่อน เราจะทำงานกับ ฐานข้อมูล เราก็ต้องใช้ mysql_connect() สำหรับเชื่อมต่อเข้ากับระบบ ซึ่งเป็นวิธีที่มีปัญหา ในเรื่องของการใช้งาน หากเราออกแบบระบบ ให้สามารถทำงานเชื่อมต่อกันหลายฐานข้อมูล หรือจะโยกย้ายระบบ การใช้งานรูปแบบเดิม จะถูกเก็บไว้ด้วยข้อจำกัดว่า ฐานข้อมูลต้องเป็น MySQL เท่านั้น แน่นอนครับ เราต้องการความยืดหยุ่นมากขึ้นกว่าเดิม

ทีนี้เราจะรู้ได้อย่างไรว่า ระบบและ PHP ของเรานั้น รองรับ ความสามารถจาก PDO แลัวหรือยัง ให้ลองเปิด PHP info ขึ้นมาดูกันครับ ถ้า PHP enable แล้วก็แปลว่า พร้อมใช้

Access Database PHP enable

php pdo enable

แบบในรูปนี่คือ เปิดใช้งานแล้วนะครับ ถ้ายังไม่เปิด ให้ไปดู Version ก่อนครับ เพราะรู้สกว่าตั้งแต่ Version 5.5 ขึ้นมาก็จะเปิดมาอัตโนมัติให้แล้ว แต่ถ้ายังไม่มีก็สามารถไปเปิดได้บน php.ini ครับ

phpini

phpini

ถ้าในไฟล์ php.ini ตรงส่วนของ extension  มีเครื่องหมาย semicolon ขวางข้างหน้าอยู่แบบนี้ คือยังใช้งานไม่ได้นะครับ เราต้องเอา เครื่องหมาย semicolon ด้านหน้าออกซะก่อน ให้กลายเป็นแบบนี้ (เครื่องหมาย semicolon ในไฟล์ config จะหมายถึงการ comment)

extension

extension

อันไหนไม่ได้ใช้ ก็ปิดเอาไว้นะครับ ไม่ต้องไปเปิดหมด แบบในรูปก็ได้ เท่านี้ก็ใช้งานได้แล้ว ส่วนใครใช้งาน Linux อยู่ หรือจะ Set ค่าบน Host ถ้าเป็น Debiun หรือ Ubuntu ก็ใช้คำสั่ง ด้านล่างนี้ครับ


sudo apt-get install php5-mysqlnd

ถ้าเป็นฝั่ง Fedora หรือ CentOS ก็แบบนี้


sudo yum --enablerepo=remi,remi-php56 install php-pdo

ทีนี้ถ้าระบบเราพร้อมกันแล้ว เรามาลองเขียนกันเลยครับ เริ่มจากเขียน แบบตัวอย่างเก่าให้ดูก่อน จะได้เปรียบเทียบกันได้


<?php
$link = mysql_connect('localhost', 'username', 'password');
mysql_select_db('testdb', $link);
mysql_set_charset('UTF-8', $link);
?>

ข้างบนนี่เป็นแบบเก่านะครับ ทีนี้เราจะมาลองเขียน ในรูปแบบของ PDO กันดูบ้าง


$db = new PDO('mysql:host=localhost; dbname=zendtut; charset=utf8', 'root', '');

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


<?php
try {
 $db = new PDO('mysql:host=localhost; dbname=zendtut; charset=utf8', 'root', '');
 echo "Hello Zendtut";
} catch (Exception $e) {
 echo "Can not connect to database";
 throw new Exception($e);
}
?>

อันนี้ผมจะลอง Run ดูก็จะขึ้นได้ ปรกติ ก็จะทำงานในส่วนของ try ออกมา

try

try

แต่ถ้าลอง ทำข้อมูลแบบผิดๆดูบ้าง

catch

catch

จะเห็นว่า มันจะขึ้นข้อมูลในส่วนของ Catch ออกมาแทน ซึ่งจะมีข้อความของเรา และ Error ที่บอกรายละเอียดด้วย ว่าเราทำอะไรผิดไป ทำให้เราแก้ไขความผิดพลาด ต่างๆได้มากขึ้น เช่นตรงนี้ ผมเอาชื่อของฐานข้อมูล ห่างออกมาจากเครื่องหมายเท่ากับ ซึ่งในการเขียน PDO ไม่ถูกต้อง มันเลยแจ้งว่า Unknow database zendtut ที่เขียนเอาไว้ใน index.php บรรทัดที่ 3 โห…แบบนี้แก้สบายเลย บอกขนาดนี้

ต่อไป ถ้าเราทำการ เชื่อมต่อได้แล้ว แบบนี้ เราก็จะมาลองดึงข้อมูล หรือการ Select ข้อมูลจากฐานข้อมูลออกมาดูกันบ้าง


<?php
try {
 // connect database
 $db = new PDO('mysql:host=localhost; dbname=zendtut; charset=utf8', 'root', '');
 // sql statement
 $select = $db->query('SELECT * FROM customer_tbl');
 // display on while loop
 $customer = $select->fetchAll();
 foreach ($customer as $c) {
   echo $c['first_name']." ".$c['last_name'];
  echo "<br>";
 } // end foreach

} catch (Exception $e) {
 echo "Can not connect to database";
 throw new Exception($e);
}
?>

read

read

จะเห็นว่า ในตัวอย่าง ผมดึงข้อมูล ออกมา ด้วยการเขียน SQL แล้ว query เก็บเอาไว้ใน $select แล้วจากนั้น ก็เอามาเข้า function fetchAll() เพื่อ access ดึงค่ามาเก็บไว้เป็น array แล้วสุดท้าย จับมาวนลูปด้วย foreach เพื่อแสดงข้อความทั้งหมด เป็นอันจบ Process การทำงาน ด้วย PDO ครั้งแรกของเรา

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

 

อ้างอิง : PHP PDO Manual