首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PDO 數據庫連接 DSN 字符串完整參考手冊

     編輯:PHP 綜合知識

概述

PDO (PHP Data Objects) 使用 DSN (Data Source Name) 字符串來定義數據庫連接參數。不同數據庫驅動程序的 DSN 格式各不相同,本文匯總了主流數據庫的標準寫法,供開發者快速查閱。

常用數據庫 DSN 格式

Microsoft SQL Server / Sybase / FreeTDS

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

Firebird / InterBase

firebird:User=john;Password=mypass;Database=DATABASE.GDE;DataSource=localhost;Port=3050

IBM DB2

DRIVER={IBM DB2 ODBC DRIVER};DATABASE=database;HOSTNAME=hostname;PORT=port;PROTOCOL=TCPIP;UID=username;PWD=password;

Informix

informix:host=host.domain.com;service=9800;database=common_db;server=ids_server;protocol=onsoctcp;EnableScrollableCursors=1

MySQL

# TCP/IP 連接
mysql:host=localhost;port=3307;dbname=testdb

# Unix Socket 連接(本機高性能)
mysql:unix_socket=/tmp/mysql.sock;dbname=testdb

Oracle (OCI)

oci:dbname=//localhost:1521/mydb

ODBC 通用連接

# 系統 DSN
odbc:testdb

# 無 DSN 連接 IBM DB2
odbc:DRIVER={IBM DB2 ODBC DRIVER};HOSTNAME=localhost;PORT=50000;DATABASE=SAMPLE;PROTOCOL=TCPIP;UID=db2inst1;PWD=ibmdb2;

# Microsoft Access
odbc:Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\\db.mdb;Uid=Admin

PostgreSQL

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

SQLite / SQLite2

# SQLite 3 文件數據庫
sqlite:/opt/databases/mydb.sq3
sqlite::memory:  # 內存數據庫

# SQLite 2
sqlite2:/opt/databases/mydb.sq2
sqlite2::memory:

最佳實踐提示

  • 字符集指定: MySQL 建議在 DSN 中添加 charset=utf8mb4(PDO::MYSQL_ATTR_INIT_COMMAND 替代方案)。
  • 持久連接: 在 DSN 前綴添加 persistent: 可啟用持久連接,如 mysql:host=...;dbname=...;persistent=true。
  • 錯誤模式: 連接後立即設置 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);。
  • 預處理語句: 禁用模擬預處理 $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 以提升安全性與性能。

快速連接示例

try {
    $dsn = 'mysql:host=127.0.0.1;port=3306;dbname=myapp;charset=utf8mb4';
    $pdo = new PDO($dsn, 'username', 'password', [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES => false,
    ]);
    echo "連接成功";
} catch (PDOException $e) {
    die("連接失敗: " . $e->getMessage());
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved