2009-04-26 06:42

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

  1. <?php 
  2. $hostname = "localhost"; 
  3. $database = "test_db"; 
  4. $username = "root"; 
  5. $password = "0000"; 
  6.  
  7.  
  8. /* DSN :   
  9. mysql:host=localhost;port=3307;dbname=testdb;unix_socket=/tmp/mysql.sock; 
  10.  
  11. pgsql:host=localhost port=5432 dbname=testdb user=bruce password=mypass; 
  12.  
  13. mssql:host=localhost;dbname=testdb 
  14. sybase:host=localhost;dbname=testdb 
  15. dblib:host=localhost;dbname=testdb 
  16.  
  17. odbc:DRIVER={IBM DB2 ODBC DRIVER};HOSTNAME=localhost;PORT=50000;DATABASE=SAMPLE;PROTOCOL=TCPIP;UID=db2inst1;PWD=ibmdb2; 
  18. odbc:Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\\db.mdb;Uid=Admin; 
  19.  
  20. ibm:DRIVER={IBM DB2 ODBC DRIVER};DATABASE=testdb;HOSTNAME=11.22.33.444;PORT=56789;PROTOCOL=TCPIP; 
  21.  
  22. oci:dbname=192.168.10.145/orcl;charset=CL8MSWIN1251 
  23.  
  24. sqlite:/opt/databases/mydb.sq3 
  25. sqlite::memory: 
  26. sqlite2:/opt/databases/mydb.sq2 
  27. sqlite2::memory: 
  28. */ 
  29.  
  30. $dsn="mysql:host=$hostname;dbname=$database"; 
  31. try { 
  32.    $DB_Link = new PDO($dsn, $username,$password 
  33.        /*,array( 
  34.            PDO::ATTR_PERSISTENT => true,  // 開啟 DB 長連接 
  35.            PDO::MYSQL_ATTR_INIT_COMMAND =>  // MySQL 前置設定 
  36.             "SET NAMES 'utf8'; SET group_concat_max_len=65536;", 
  37.            PDO::MYSQL_ATTR_USE_BUFFERED_QUERY=>false // MySQL 查詢緩衝區 
  38.        )*/ 
  39.    );  
  40. } catch (PDOException $e) { 
  41.    // 資料庫連結失敗 
  42.    $e->errorInfo ; // 錯誤明細 
  43.    $e->getMessage(); // 返回異常資訊 
  44.    $e->getPrevious(); // 返回前一個異常 
  45.    $e->getCode(); // 返回異常程式碼 
  46.    $e->getFile(); // 返回發生異常的檔案名 
  47.    $e->getLine(); // 返回發生異常的程式碼行號 
  48.    $e->getTrace(); // backtrace() 陣列 
  49.    $e->getTraceAsString(); // 已格成化成字串的 getTrace() 資訊     
  50.  
  51.    // 錯誤處理... 
  52. } 
  53.  
  54. /* 
  55. PDO::ATTR_CASE: 返回的資料欄位名稱設定 
  56.    PDO::CASE_LOWER: 欄位名稱全部轉換成小寫 
  57.    PDO::CASE_NATURAL: 使用原始欄位名稱(預設) 
  58.    PDO:: CASE_UPPER: 欄位名稱全部轉換成大寫 
  59. */ 
  60. //$DB_Link->setAttribute(PDO::ATTR_CASE,PDO::CASE_NATURAL); 
  61.  
  62.  
  63. /* 
  64. PDO::ATTR_ERRMODE: 錯誤報告 
  65.    PDO::ERRMODE_SILENT: 不顯示錯誤信息,只顯示錯誤碼。 
  66.    PDO::ERRMODE_WARNING: 顯示警告跟錯誤。 
  67.    PDO::ERRMODE_EXCEPTION: 拋出異常。 
  68. */ 
  69. $DB_Link->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING); 
  70.  
  71.  
  72. /* 
  73. PDO::ATTR_ORACLE_NULLS : 轉換無效的空字串 
  74.    PDO::NULL_NATURAL: 不轉換(預設)。 
  75.    PDO::NULL_EMPTY_STRING: 空字串轉換為 NULL。 
  76.    PDO::NULL_TO_STRING: NULL 轉換為空字串。 
  77. */ 
  78. //$DB_Link->setAttribute(PDO::ATTR_ORACLE_NULLS,PDO::NULL_NATURAL); 
  79.  
  80. /* 
  81. PDO::ATTR_STRINGIFY_FETCHES: 
  82.    Convert numeric values to strings when fetching. Requires bool.  
  83. */ 
  84. //$DB_Link->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true); 
  85.  
  86.  
  87. /* 
  88. PDO::ATTR_STATEMENT_CLASS: 變更預設 PDOStatement Class 
  89. */ 
  90. //class DBStatement extends PDOStatement {} 
  91. //$DB_Link->setAttribute(PDO::ATTR_STATEMENT_CLASS, 
  92. //     array('DBStatement', array($DB_Link)) 
  93. //); 
  94.  
  95.  
  96. /* 
  97. PDO::ATTR_AUTOCOMMIT: 自動啟動交易處理 
  98.    在設置成true的時候,PDO會自動嘗試停止接受委託,開始執行 
  99. */ 
  100. //$DB_Link->setAttribute(PDO::ATTR_AUTOCOMMIT,true); 
  101.  
  102.  
  103.  
  104. // 設定存取的編碼方式 
  105. $DB_Link->exec("SET NAMES 'utf8';"); 
  106.  
  107. // 設定 GROUP_CONCAT 的最大長度 
  108. $DB_Link->exec("SET group_concat_max_len=65536;"); 
  109.  
  110. // 關閉查詢快取 
  111. //$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 回應: