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() 的功能。
Personal tools
廣告橫額