วันศุกร์ที่ 6 กุมภาพันธ์ พ.ศ. 2558

PDO มีมานานแต่หลายคนก็ไม่ใช้ (การ PHP Connect Database แบบ PDO)


ใช้มัน(PDO)ทำไม

ก่อนอื่นการใช้ query แบบเดิมๆที่เราใช้กันจะเป็นในลักษณะนี้

<?php
$host = "localhost" ; $username = "xxx" ; // ชื่อผู้ใช้ในการติดต่อกับฐานข้อมูล $password = "xxx" ; // password ในการเชื่อมต่อกับฐานข้อมูล $dbname = "xxx" ; // ชื่อฐานข้อมูล $c = mysql_connect($host,$username,$password); // ติดต่อฐานข้อมูล if (!$c){ echo "<h3>ERROR : ไม่สามารถติดต่อฐานข้อมูลได้</h3>"; exit(); } mysql_query("SET NAMES UTF8"); // สำหรับการติดต่อฐานข้อมูลแบบ UTF8 mysql_select_db($dbname,$c); // สำหรับเลือกชื่อฐานข้อมูลที่ต้องการติดต่อ
 ?>
ต่อมาเราจะลอง query เพื่อตรวจสอบการ login ของ user จากตาราง user
<?php
$sql = "SELECT username FROM user
WHERE username = '$_POST[username]' AND password = '$_POST[password]'";
mysql_query($sql); 

?>

ถ้าในกรณีที่เราใส่ข้อมูลใน form กรอก username ด้วยชื่อ username ของใครก็ได้แล้วตามด้วย -- (หมายความว่าเป็นการ comment ของภาษา sql) แล้วพิมพ์ password อะไรลงไปก็ได้

ดังนั้นเราจะได้รูปแบบคำสั้งดังนี้

SELECT username FROM user WHERE username = 'user01' -- AND password = XXX
 ดังนั้นเงื่อนไขจะเป็นจริงตลอด จึง login เข้าได้โดยไม่ต้องรู้ password ก็ได้

แล้วใช้ PDO ยังไงหว่า
ดังนั้นเราจึงมาเลือกวิธีการแบบ PDO กันดีกว่า โดยจะเป็นไปในลักษณะนี้
<?php
// ระบุค่า host และชื่อของ database
$dsn = 'mysql:host=localhost;dbname=XXX';
// ระบุ username และ password 
$username = 'username';
$password = 'password';
// คือการต่อเข้ากับฐานข้อมูลแบบ UTF-8
$options = array(
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
);
$dbh = new PDO($dsn, $username, $password, $options);
?>

และเมื่อเราทำการ connect เข้ากับ database แล้ว ทีนี้เราจะมาลอง query แบบง่ายๆกันดีกว่า

<?php
// เราจะต้องทำการ prepare คำสั่ง SQL สะก่อน$sth = $dbh->prepare("SELECT username FROM user WHERE username = :username AND password = :password");
// จากนั้นทำการ execute คำสั่ง SQL พร้อมนำข้อมูลที่ต้องการ binding เข้าไปใน ? ที่เราตามที่เราต้องการ โดยที่มันจะทำหน้าที่ตัดข้อความที่ไม่พึงประสงค์ออกไปในเบื้อต้น$result = $sth->execute(               array(':username' => $_POST['username'], ':password' => $_POST['password'])               ); 
// ตรวจสอบว่า execute ผ่านหรือไม่if($result) {             // ทำการ fetch ค่าออกมาใช้งาน โดย PDO::FETCH_ASSOC คือการใช้ชื่อ colum name เป็น index ของ array            $result = $sth->fetch(PDO::FETCH_ASSOC);            print_r($result);}

?>

ปลอดภัยกว่ากันตั้งเยอะ ดังนั้นมาใช้ PDO กันเถิดครับ

ไม่มีความคิดเห็น:

แสดงความคิดเห็น