使用PDO讀取資料庫的好處,在於如果更換資料庫時,不需要更改到程式碼!

例如MySQL轉移到其他資料庫上,若code使用mysql_connect()等函式,就必須重新更改!

<?php
$dsn = "mysql:host=localhost;dbname=pdo;";
//PDO::MYSQL_ATTR_INIT_COMMAND為PDO常數(設定INIT同時做的操作),在連上資料庫同時做SET NAMES 'utf8'的動作
$db = new PDO($dsn,"root","123",array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));

echo "一次讀取一筆資料\n";
$rs = $db -> query("SELECT * FROM pdo_test");
echo "顯示錯誤訊息\n";
echo $db -> errorInfo();
echo "資料總筆數:".$rs -> rowCount();
while($rows = $rs -> fetch())
{
        echo $rows['ID']."\t".$rows['name']."\n";
}
echo "\n\n";


echo "一次讀出全部資料\n";
$rs = $db -> query("SELECT * FROM pdo_test");
$rows = $rs->fetchAll();
foreach($rows as $i)
{
        echo $i['ID']."\t".$i['name']."\n";
}
echo "\n\n";

echo "新增一筆資料\n";
//exec主要是用在沒有回傳集合的功能(insert、update、delete)
$rs = $db->exec("INSERT INTO pdo_test values('','abcd')");

//查詢最後一筆新增的ID(AUTOINCREMENT Key)
echo $db->lastInsertId();

另外可以利用beginTransaction一次做多個query

//啟用除錯模式,當遇到錯誤時會拋出例外
try{
    $db -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $db -> beginTransaction();
    $db -> exec("INSERT INTO table VALUES('aaa','aaa','0','0','0')");
    $db -> exec("INSERT INTO table VALUES('bbb','bbb','0','0','0')");
    $db -> commit();
} catch (PDOException $e ){
    //將該Transaction的動作全部還原
    $dbh->rollBack();
    echo $e->getMessage();
}
Categories: PHP