รู้ 3 Method ใน PDO คุณก็สามารถพัฒนา Web Application ได้
สวัสดีครับ วันนี้เรามาเรียนรู้ Method ที่ใช้งานกันบ่อยๆ ใน PDO หรือ PHP Data Object กันนะครับ เป็นจุดเริ่มต้นของการเรียนรู้ PDO ลองไปดูกันเลยนะครับ
PDO คืออะไร
ก่อนที่จะเข้าเรื่องเราไปเข้าใจกันก่อนนะครับว่า PDO คืออะไร PDO หรือ PHP Data Object เป็น Object Class ที่ติดมากับ PHP ซึ่งเป็น Extension หนึ่งใน PHP มีหน้าที่ในการจัดการกับฐานข้อมูลโดยสามารถเชื่อมต่อกับฐานข้อมูลได้หลากหลาย เช่น เชื่อมต่อกับ MySQL, Oracle, Microsoft SQL, SQLite หรือ ProgreSQL เป็นต้น ทำให้ปัจจุบันทีมพัฒนา PHP ได้แนะนำให้ใช้ PDO ในการเขียนเพื่อเชื่อมต่อและใช้งานกับฐานข้อมูลแทน โดย MySQL Function จะกำลังถูกยกเลิก ซึ่งก็ได้มีการแจ้งเตือนเมื่อเรียกใช้งานตั้งแต่ PHP 5.4 เป็นต้นมา
การติดต่อฐานข้อมูล
เริ่มต้นด้วยการเขียนโปรแกรมสำหรับการติดต่อฐานข้อมูลก่อนนะครับ ในที่นี้จะใช้การเขียนโปรแกรมเพื่อติดต่อฐานข้อมูล MySQL
ตัวอย่างการเขียนโปรแกรมเพื่อติดต่อฐานข้อมูลโดยสร้างเป็นไฟล์เช่น connection.php
$host = 'localhost';//ชื่อ Host ฐานข้อมูล
$user = 'root';//ชื่อผู้ใช้งานฐานข้อมูล
$pass = '';//รหัสผ่านเข้าฐานข้อมูล
$db = 'test_database';//ชื่อฐานข้อมูล
try{
$con = new PDO("mysql:host=".$host."; dbname=".$db."", $user,$pass,
array(PDO::MYSQL_ATTR_INIT_COMMAND=>"SET NAMES utf8"));//กำหนดการเชื่อมต่อแบบ utf-8 (เวลาสร้างไฟล์ก็ใช้การเข้ารหัสอักขระ utf-8 ด้วยครับ)
}catch(PDOException $e){//ดักจับ ERROR แล้วเก็บไว้ใน $e
echo $e->getMessage();# แสดงออกมาหน้าจอ
}
การประมวลผลข้อมูล
สำหรับการประมวลผลข้อมูลนั้นจะต้องมี
- คำสั่ง SQL
- Method prepare();
- Method execute(); หากคำสั่ง SQL มีตัวแปรให้ Bind Param execute(array('id'=>1));
- Method fetch();
การเลือกข้อมูลมาแสดงผล
เอาล่ะครับมาดูกันว่าเริ่มแรกเราควรจะสร้างการดึงข้อมูลจากตารางมาแสดงรายการข้อมูลกันก่อนนะครับ สิ่งที่เราจะต้องเรียนรู้คือ
- คำสั่ง SQL ในการเลือกข้อมูลในที่นี้คือ SELECT * FROM table_name
- คำสั่งในการประมวลผลผ่าน PDO method
- $result = $con->prepare($sql);
- $result->execute();
- วน Loop การแสดงผลด้วย while($rs=$result->fetch()){...}
- การแสดงผลในรูปแบบ table (อาจใช้ Bootstrap ร่วมด้วย)
ดูตัวอย่างการเขียนโปรแกรมเพื่อแสดงรายการข้อมูล ไฟล์ admin_post.php
<?php
include 'connection.php';
$sql = "SELECT * FROM post p";
$result = $con->prepare($sql);
$result->execute();
?>
<a href="admin_post.php">เพิ่มข้อมูล</a>
<div class="table-responsive">
<table class="table table-bordered table-striped table-hover">
<thead>
<tr>
<th>หัวข้อ</th>
<th>วันที่โพส</th>
<th></th>
</tr>
</thead>
<tbody>
<?php while($rs = $result->fetch()){?>
<tr>
<td><?php echo $rs['title'];?></td>
<td><?php echo $rs['created'];?></td>
<td>
<a href="admin_post_edit.php?id=<?= $rs[0];?>">แก้ไข</a>
<a href="admin_post_del.php?id=<?= $rs[0];?>">ลบ</a>
</td>
</tr>
<?php }?>
</tbody>
</table>
</div>
จะเห็นว่ามีการเรียกใช้งาน 3 Method นั่นคือ prepare(),execute() และ fetch() และมีการ Loop ข้อมูลเพื่อการแสดงผลโดยใช้ Function while()
และจะเห็นว่าลิ้งค์ไปยังการแก้ไข และการลบนั้นมีการใช้ $rs[0] เนื่องจาก Field แรกของฐานข้อมูลเป็น id ที่เป็น Primary Key และที่ไม่ใช้ id ก็เพราะว่าหากมีการ Join ตารางอื่นๆ มันจะไปเอา id ของตารางอื่นซึ่งจะใช้ไม่ได้
การเพิ่มข้อมูล
ส่วนของการเพิ่มข้อมูลจะมี 2 ส่วนด้วยกันคือส่วนของฟอร์มเพื่อกรอกข้อมูล และส่วนของโปรแกรมที่จะรับข้อมูลมาประมวลผล
ส่วนฟอร์ม (ไฟล์ admin_post_add.php)
<form method="post" action="<?= $_SERVER['PHP_SELF'];?>">
หัวข้อ <input type="text" name="post[title]" required="required" />
required="required"
รายละเอียด <textarea name="post[detail]"></textarea>
<input type="submit" value="บันทึกข้อมูล">
</form>
เทคนิค
- เป็นการส่งข้อมูลจากฟอร์มมาที่ไฟล์เดิมในส่วน action โดยใช้ <?= $_SERVER['PHP_SELF'];?>
- การส่งข้อมูลผ่านตัวแปรแบบ array คือ post โดยมี key 2 ตัวคือ title และ detail
ส่วนรับข้อมูล (ไฟล์ admin_post_add.php)
ส่วนการรับข้อมูลจะเขียนโปรแกรมในการตรวจสอบว่ามีการ $_POST ค่ามาแล้วหรือยังหากมีการ $_POST ข้อมูลมาก็จะทำการบันทึกข้อมูล
<?php
include 'conneciton.php';
if(isset($_POST['post'])){
$p = $_POST['post'];
$sql = "INSERT INTO post(title,detail,created) VALUES('".$p['title']."','".$p['detail']."','".date("Y-m-d H:i:s")."'";
$result = $con->prepare($sql);
$result->execute();
if($result===true){
echo 'บันทึกข้อมูลเรียบร้อย ';
}else{
echo 'ไม่สามารถบันทึกข้อมูลได้';
}
?>
<a href="admin_post.php">ดูรายการ</a>
จะเห็นว่ามีการใช้เพียง 2 Method เท่านั้นคือ prepare() และ execute() ก็สามารถเพิ่มข้อมูลได้แล้ว
การแก้ไขข้อมูล
สำหรับการแก้ไขข้อมูลนั้นจะคล้ายกับการเพิ่มข้อมูล แต่การแก้ไขข้อมูลนั้นจะต้องมีการนำข้อมูลเก่ามาใส่ในฟอร์มด้วยเพื่อให้เห็นข้อมูลเดิมก่อนการแก้ไข
ส่วนของฟอร์ม ไฟล์ admin_post_edit.php
<?php
include 'conneciton.php';
$sql = "SELECT * FROM post WHERE id=:id";
$result = $con->prepare($sql);
$result->execute(array('id'=>$_GET['id']));
$rs = $result->fetch();
<form method="post" action="<?= $_SERVER['PHP_SELF'];?>">
<input type="hidden" name="post[id]" value="<?= $rs[0];?>">
หัวข้อ <input type="text" name="post[title]" required="required"
value="<?= $rs['title'];?>" />
required="required"
รายละเอียด <textarea name="post[detail]">
<?= $rs['detail'];?></textarea>
<input type="submit" value="แก้ไขข้อมูล">
</form>
ส่วนของการประมวลผลไฟล์ admin_post_edit.php
<?php
if(isset($_POST['post'])){
$p = $_POST['post'];
$sqle = "UPDATE post SET title=:title,detail=:detail WHERE id=:id";
$resulte = $con->prepare($sqle);
$resulte->execute(array('title'=>$p['title'],'detail'=>$p['detail'],'id'=>$p['id']));
if($resulte===true){
echo "แก้ไขข้อมูลเรียบร้อย";
}else{
echo "แก้ไขข้อมูลไม่ได้";
}
echo '<a href="admin_post.php">ดูรายการ</a>
}
จะเห็นว่ามีการ bind params ใน Method execute() เพื่อความปลอดภัยจาก SQL Injection
การลบข้อมูล
สำหรับการลบข้อมูลจะค่อนข้างง่ายกว่าแบบอื่น ตัวอย่างเช่น ไฟล์ admin_post_del.php
<?php
include 'connection.php';
$sql = "DELETE FROM post WHERE id=:id";
$result = $con->prepare($sql);
$result->execute(array('id'=>$_GET['id']));
echo '<a href="admin_post.php">กลับหน้ารายการ</a>';
จะเห็นได้ว่าการลบนั้นไม่ยากเลยนะครับ
สรุป
การเขียนโปรแกรมด้วย PHP Data Object ช่วยให้ Web Application มีความรวดเร็วยิ่งขึ้น โดยจากตัวอย่างนี้เป็นการเขียน CRUD (Create, Read, Update และ Delete) โดย เป็นตัวอย่างเพื่อให้สามารถทำความเข้าใจได้ง่ายๆ หวังว่าจะเป็นประโยชน์ต่อผู้ที่สนใจจะมาปรับเปลี่ยนวิธีการเขียนโปรแกรมแบบเดิมให้สามารถใช้งาน PHP Data Object ได้
ท้ายเรื่อง
หากต้องการเรียนรู้ PHP PDO สามารถเข้าเรียนรู้ผ่านคลิปวีดีโอเพื่อความเข้าใจมากยิ่งขึ้น ได้ที่ PHP
และหากต้องการตัว Generate Code เพื่อสร้าง CRUD สามารถดูรายละเอียดได้ที่นี่ PHP Code Generator
ขอขอบคุณที่อ่านจนจบนะครับ @Programmer Thailand Team
### อย่าลืมสมัครรับข้อมูลข่าวสาร โดยการกรอก Email ที่ช่องด้านล่างของหน้านี้นะครับ เพื่อรับข้อมูลข่าวสารดีๆ จาก Programmer Thailand ###
(ภาพประกอบจาก http://gencbilgin.net/wp-content/uploads/2015/02/phpdataobjects.png)