OSWikiHK: 請協力 GPLv3 的中文翻譯工作。
PEAR::DB::Connect
OSWikiHK,自由中文開源知識庫
前面的例子已顯示連接資料庫的工作是由 DB::connect 來達成。
它會經由參數得知要連接的是那個 DBMS ,
載入需要的資料庫驅動類別並向資料庫伺服器發出連接要求,
成功就傳回載有連接資料庫資料的物件。
要連接資料庫,當然一定要知道要連接那台資料庫伺服器的資料庫
,連接帳戶及密碼等。 這方面我們要用 DSN (Data Source Name)
來告知 DB::connect 。 DSN 的格式如下:
phptype(dbsyntax)://username:password@protocol+hostspec/database
- phptype
- DBMS 的類型 (如 mysql 及 oracle 等)
- dbsyntax
- 資料庫使用那種 SQL 語法
- protocol
- 連接用的通訊協定 (如 tcp 及 unix 等)
- hostspec
- 連接的電腦 (hostname[[:port])
- database
- 要連接的資料庫名稱
- username
- 連接用的帳戶名稱
- password
- 連接用的帳戶密碼
例如要連接電腦 db.foo.com 中的 MySQL 伺服器裡的資料庫 test ,就可以用:
$dbh = DB::connect('mysql://jrandom:!ItIsSecret@db.foo.com/test');
使用 unix socket 連接所在電腦中的 PostgreSQL 伺服器,則用:
$dbh = DB::connect('pgsql://jrandom:!AlsoSecret@unix+localhost/hklug');
除了用整串 DSN ,您亦可以把 DSN 的參數放入陣列中:
$dsn = array(
'phptype' => 'mysql',
'hostspec' => 'localhost',
'username' => 'xychen',
'password' => '!AnotherSecret'
}
$dbh = DB::connect($dsn);
DB::connect 會根據 DSN 載入有關 DBMS 的類別。 PHP 4.0.6 中的 PEAR 已支援下列 DBMS :
- !InterBase (ibase)
- Informix (ifx)
- mSQL (msql)
- mssql (MS SQL)
- [MySQL] (mysql)
- Oracle 7/8/8i (oci8)
- ODBC (odbc)
- PostgreSQL (pgsql)
- !SyBase (sybase)
另外,除了 DSN ,您亦可以設定這個連接的一些選項:
$dbh = DB::connect($dsn, array('persistent' => true));
不同的 DBMS 會有不同的選項,而最基本所有都有兩個選項:
- persistent
- 是否 persistent connection , 預設為否。
- optimize
- 可以是 'performance' 或 'portability',從字面上可以知道這個選項可以控制查詢時則重速度還是兼容性。暫時來說,這選項只在 MySQL 、 !FrontBase 及 Oracle 中有作用。選 'portability' 在 MySQL 及 !FrontBase 中會自動修改 DELETE 命令,令 $dbh->affectedRows() 可以傳回刪除了多少筆記錄。在 Oracle 中則會替您模擬 $dbh->numRows() 的功能。

