2009-04-26

[PHP] PDO 資料庫連接設定(快速範例)


<?php
$hostname = "localhost";
$database = "test_db";
$username = "root";
$password = "0000";


/* DSN :
mysql:host=localhost;port=3307;dbname=testdb;unix_socket=/tmp/mysql.sock;

pgsql:host=localhost port=5432 dbname=testdb user=bruce password=mypass;

mssql:host=localhost;dbname=testdb
sybase:host=localhost;dbname=testdb
dblib:host=localhost;dbname=testdb

odbc:DRIVER={IBM DB2 ODBC DRIVER};HOSTNAME=localhost;PORT=50000;DATABASE=SAMPLE;PROTOCOL=TCPIP;UID=db2inst1;PWD=ibmdb2;
odbc:Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\\db.mdb;Uid=Admin;

ibm:DRIVER={IBM DB2 ODBC DRIVER};DATABASE=testdb;HOSTNAME=11.22.33.444;PORT=56789;PROTOCOL=TCPIP;

oci:dbname=192.168.10.145/orcl;charset=CL8MSWIN1251

sqlite:/opt/databases/mydb.sq3
sqlite::memory:
sqlite2:/opt/databases/mydb.sq2
sqlite2::memory:
*/

$dsn="mysql:host=$hostname;dbname=$database";
try {
$DB_Link = new PDO($dsn, $username,$password
/*,array(
PDO::ATTR_PERSISTENT => true, // 開啟 DB 長連接
PDO::MYSQL_ATTR_INIT_COMMAND => // MySQL 前置設定
"SET NAMES 'utf8'; SET group_concat_max_len=65536;",
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY=>false // MySQL 查詢緩衝區
)*/
);
} catch (PDOException $e) {
// 資料庫連結失敗
$e->errorInfo ; // 錯誤明細
$e->getMessage(); // 返回異常資訊
$e->getPrevious(); // 返回前一個異常
$e->getCode(); // 返回異常程式碼
$e->getFile(); // 返回發生異常的檔案名
$e->getLine(); // 返回發生異常的程式碼行號
$e->getTrace(); // backtrace() 陣列
$e->getTraceAsString(); // 已格成化成字串的 getTrace() 資訊

// 錯誤處理...
}

/*
PDO::ATTR_CASE: 返回的資料欄位名稱設定
PDO::CASE_LOWER: 欄位名稱全部轉換成小寫
PDO::CASE_NATURAL: 使用原始欄位名稱(預設)
PDO:: CASE_UPPER: 欄位名稱全部轉換成大寫
*/
//$DB_Link->setAttribute(PDO::ATTR_CASE,PDO::CASE_NATURAL);


/*
PDO::ATTR_ERRMODE: 錯誤報告
PDO::ERRMODE_SILENT: 不顯示錯誤信息,只顯示錯誤碼。
PDO::ERRMODE_WARNING: 顯示警告跟錯誤。
PDO::ERRMODE_EXCEPTION: 拋出異常。
*/
$DB_Link->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);


/*
PDO::ATTR_ORACLE_NULLS : 轉換無效的空字串
PDO::NULL_NATURAL: 不轉換(預設)。
PDO::NULL_EMPTY_STRING: 空字串轉換為 NULL。
PDO::NULL_TO_STRING: NULL 轉換為空字串。
*/
//$DB_Link->setAttribute(PDO::ATTR_ORACLE_NULLS,PDO::NULL_NATURAL);

/*
PDO::ATTR_STRINGIFY_FETCHES:
Convert numeric values to strings when fetching. Requires bool.
*/
//$DB_Link->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true);


/*
PDO::ATTR_STATEMENT_CLASS: 變更預設 PDOStatement Class
*/
//class DBStatement extends PDOStatement {}
//$DB_Link->setAttribute(PDO::ATTR_STATEMENT_CLASS,
// array('DBStatement', array($DB_Link))
//);


/*
PDO::ATTR_AUTOCOMMIT: 自動啟動交易處理
在設置成true的時候,PDO會自動嘗試停止接受委託,開始執行
*/
//$DB_Link->setAttribute(PDO::ATTR_AUTOCOMMIT,true);



// 設定存取的編碼方式
$DB_Link->exec("SET NAMES 'utf8';");

// 設定 GROUP_CONCAT 的最大長度
$DB_Link->exec("SET group_concat_max_len=65536;");

// 關閉查詢快取
//$DB_Link->exec("SET SESSION query_cache_type=OFF;");





參考來源:
PHP: PDO Drivers - Manual
PHP: PDO::__construct - Manual
PHP: PDOException - Manual
PHP: PDO::setAttribute - Manual

牛刀小小試 PHP5中PDO的簡單使用

0 回應: