วันจันทร์ที่ 23 มีนาคม พ.ศ. 2558

PHP PDO คืออะไร ? มาดูกัน

ก่อนอื่นขอเกริ่นก่อนเลยว่าผมไม่เคยรู้จักกับ PDO มาก่อนเลย ไม่รู้ว่ามันทำอะไรได้บ้าง แค่เห็นมันเป็น OOP ก็หยี้แล้ว 55 แต่ช้าก่อน วันนี้เราจะมาทำความรู้จักกับเจ้า PDO แบบเบื้องต้นพร้อมผมเลยครับ




PHP PDO คืออะไรวันนี้มีคำตอบนะครับ PDO คือ Extension หรือส่วนเสริมของ PHP ย่อมาจากคำว่า PHP DataObject ซึ่งเป็น Object ที่ใช้ในการเชื่อมต่อกับฐานข้อมูลได้หลากหลายโดยที่เราไม่ต้องมานั่งเรียนรู้การใช้งานฐานข้อมูลแต่ล่ะฐาน ที่สำคัญคือใช้คำสั่งเดียวสามารถทำงานได้กับฐานข้อมูลหลายๆ แบบได้นั่นเอง เช่นคำสั่งเรียกข้อมูล $obj->fetch() หากมีการเปลี่ยนฐานข้อมูลก็ยังใช้คำสั่งเดิมไม่ได้เปลี่ยน จึงทำให้ PDO มีความยืดหยุ่นและสะดวกมากยิ่งขึ้น
PHP เวอร์ชั่น 5.5 ขึ้นไปได้ยกเลิกการเชื่อมต่อ MySQL แบบเดิมแล้วคือการใช้ Function mysql_connect() และ mysql_xxxx() ทั้งหลาย แต่จะไปใช้ MySQLi หรือ MySQL Improved แทนซึ่งมีความปลอดภัยมากกว่า
แต่อย่างไรก็ตามผมคิดว่าเราควรมาเริ่มใช้งาน PDO มากกว่า เนื่องจากการทำงานเป็นลักษณะ Object ซึ่ง PHP ก็รองรับการเขียนโปรแกรมแบบ Object มากยิ่งขึ้น และนอกจากนั้นจำทำให้เราพัฒนาตัวเองให้สามารถเขียนโปรแกรมในระดับที่สูงขึ้นได้เช่นกัน

ตัวอย่างการใช้งาน

# การติดต่อฐานข้อมูล
code ในการเชื่อมต่อแบบ php_mysql


<pre class="brush: javascript">
dp.SyntaxHighlighter.BloggerMode();

dp.SyntaxHighlighter.HighlightAll('code');
</pre>


code ในการเชื่อมต่อแบบ PDO


<script language="javascript">  
  
dp.SyntaxHighlighter.BloggerMode();  
  
dp.SyntaxHighlighter.HighlightAll('code');  
  
</script>
แค่นี้ก็ง่าย และสั้นกว่าเห็น ๆ แล้ว :)


สำหรับ code ในการ query ข้อมูลแบบ php_mysql

<?php
$result = mysql_query('SELECT * from table') or die(mysql_error());
 
$num_rows = mysql_num_rows($result);
 
while($row = mysql_fetch_assoc($result)) {
   echo $row['field1'].' '.$row['field2']; //etc...
}
?>
ส่วน PDO จะเป็น
<?php
foreach($db->query('SELECT * FROM table') as $row) {
    echo $row['field1'].' '.$row['field2']; //etc...
}
?>
หรือ
<?php
$stmt = $db->query('SELECT * FROM table');
 
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    echo $row['field1'].' '.$row['field2']; //etc...
}
?>


หรือ

<?php
$stmt = $db->query('SELECT * FROM table');
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
//use $results
?>
การนับแถวด้วย  rowCount();
<?php
$stmt = $db->query('SELECT * FROM table');
$row_count = $stmt->rowCount();
echo $row_count.' rows selected';
?>
การ INSERT,DELETE,UPDATE ด้วย PDO
<?php
$stmt = $db->prepare("INSERT INTO table(field1,field2,field3,field4,field5) VALUES(:field1,:field2,:field3,:field4,:field5)");
$stmt->execute(array(':field1' => $field1, ':field2' => $field2, ':field3' => $field3, ':field4' => $field4, ':field5' => $field5));
$affected_rows = $stmt->rowCount();
?>
<?php
$stmt = $db->prepare("DELETE FROM table WHERE id=:id");
$stmt->bindValue(':id', $id, PDO::PARAM_STR);
$stmt->execute();
$affected_rows = $stmt->rowCount();
?>

<?php
$stmt = $db->prepare("UPDATE table SET name=? WHERE id=?");
$stmt->execute(array($name, $id));
$affected_rows = $stmt->rowCount();
?>
นี้ก็คร่าว ๆ ของเจ้า PHP PDO เป็นไงก็บ้างครับ ส่วนตัวผมคิดว่ามันก็ง่ายดีนะ สั้น ๆ ดี แม้แรก ๆ จะคิดว่ามันยากเพราะเป็น OOP เต็มรูปแบบ แถมยังใช้ได้กับหลายฐานข้อมูลโดยที่เราไม่ต้องเปลี่ยนโค้ดทั้งหมด เพียงแค่เปลี่ยนการเชื่อมต่อเท่านั้น ส่วนคนไหนสนใจเพิ่มก็เข้าไปศึกษากันต่อได้ครับ
ที่มา :

มาใช้ PHP Data Object (PDO) กันเถอะ

PHP PDO คืออะไร