ใช้มัน(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 กันเถิดครับ
ไม่มีความคิดเห็น:
แสดงความคิดเห็น