以多種方式調(diào)用構(gòu)造方法創(chuàng)建PDO對(duì)象
發(fā)表時(shí)間:2023-08-28 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]以多種方式調(diào)用構(gòu)造方法創(chuàng)建PDO對(duì)象可以以多種昂方式調(diào)構(gòu)造方法創(chuàng)建PDO對(duì)象,下面以連接MySQL 和 Oracle 服務(wù)器為例,分別介紹構(gòu)造方法的多種調(diào)用方式。一、將參數(shù)嵌入到構(gòu)造函數(shù)在下面的連接Oracle 服務(wù)器的示例中,在DSN字符串中加載OCI驅(qū)動(dòng)程序并指定里兩個(gè)可選參數(shù):第一個(gè)是數(shù)據(jù)...
以多種方式調(diào)用構(gòu)造方法創(chuàng)建PDO對(duì)象可以以多種昂方式調(diào)構(gòu)造方法創(chuàng)建PDO對(duì)象,下面以連接MySQL 和 Oracle 服務(wù)器為例,分別介紹構(gòu)造方法的多種調(diào)用方式。
一、將參數(shù)嵌入到構(gòu)造函數(shù)
在下面的連接Oracle 服務(wù)器的示例中,在DSN字符串中加載OCI驅(qū)動(dòng)程序并指定里兩個(gè)可選參數(shù):第一個(gè)是數(shù)據(jù)庫名稱,第二個(gè)是字符集。使用了特定的字符集連接一個(gè)特定的數(shù)據(jù)庫,如果不指定任何信息就會(huì)使用默認(rèn)的數(shù)據(jù)庫。代碼如下:
<?php
try{
$dbh = new PDO("OCI:dbname = accounts;charset=UTF8","scott","tiger");
}catch (PDOException $e){
echo "數(shù)據(jù)庫連接失敗:".$e->getMessage();
}
?>
OCI:dbname = accounts告訴PDO它應(yīng)該使用 OCI驅(qū)動(dòng)程序,并且應(yīng)該使用“accounts”數(shù)據(jù)庫。對(duì)于MySQL驅(qū)動(dòng)程序,第一個(gè)冒號(hào)后面的所有內(nèi)容都將會(huì)被用作MySQL的DSN。連接MySQL 服務(wù)器的顯示如下:
<?php
$dbms = "mysql"; // 數(shù)據(jù)庫的類型
$dbName ="php_cn"; //使用的數(shù)據(jù)庫名稱
$user = "root"; //使用的數(shù)據(jù)庫用戶名
$pwd = "root"; //使用的數(shù)據(jù)庫密碼
$host = "localhost"; //使用的主機(jī)名稱
$dsn = "$dbms:host=$host;dbname=$dbName";
try {
$pdo = new PDO($dsn, $user, $pwd);//初始化一個(gè)PDO對(duì)象,就是創(chuàng)建了數(shù)據(jù)庫連接對(duì)象$pdo
}catch (PDOException $e){
echo "數(shù)據(jù)庫連接失敗:".$e->getMessage();
}
?>
其他的驅(qū)動(dòng)程序會(huì)同樣以不同的方式解析它的DSN,如果無法加載驅(qū)動(dòng)程序,或者發(fā)生了連接失敗,則會(huì)拋出一個(gè)PDOException,以便您可以決定如何最好的處理該故障。省略try...catch 控制結(jié)構(gòu)并無裨益,如果在應(yīng)用程序的較高級(jí)別沒有定義異常處理,那么在無法建立數(shù)據(jù)庫連接的情況下,該腳本會(huì)終止。
二、將參數(shù)存放在文件中
在創(chuàng)建PDO對(duì)象時(shí),可以把DSN字符串放在另一個(gè)本地或者遠(yuǎn)程文件中,并在構(gòu)造函數(shù)中引用這個(gè)文件,如下所示:
<?php
try{
$dbh = new PDO('uri:file:///usr/localhost/dbconnect','webuser','password');
}catch(PDOException $e){
echo '連接失敗:'.$e->getMessage();
}
?>
只要將文件/usr/localhost/dbconnect中的DSN驅(qū)動(dòng)改變,就可以在多種數(shù)據(jù)庫系統(tǒng)之間切換,但是確保該文件由負(fù)責(zé)執(zhí)行PHP腳本的用戶所擁有,而且此用戶擁有必要的權(quán)限。
三、引用 php.ini文件
也可以在PHP服務(wù)器的配置文件中維護(hù)DSN信息,只要在php.ini文件中吧DSN信息付給一個(gè)名為 pdo.dsn.aliasname 的配置參數(shù),這里 aliasname 是后面將提供給構(gòu)造函數(shù)的DSN別名。如下所示連接Oracle 服務(wù)器,在php.ini中為DSN指定的別名為 oraclepdo:
【PDO】
pdo.dsn.oraclepdo = “OCI:dbname=//localhost:1521/mydb;chaset=UTF-8”;
重新啟動(dòng) Apaceh服務(wù)器后,就可以在php程序中,調(diào)用PDO構(gòu)造方法時(shí),在第一個(gè)參數(shù)中使用這個(gè)別名,如下所示:
<?php
try{
$dbh = new PDO('oraclepdo','scott','tiger');//使用php.ini文件中的oraclepdo 別名
}catch(PDOException $e){
echo '連接失敗:'.$e->getMessage();
}
?>
四、PDO與連接有關(guān)的選項(xiàng)
在創(chuàng)建PDO對(duì)象時(shí),有一些與數(shù)據(jù)庫連接有關(guān)選項(xiàng),可以將必要的幾個(gè)選項(xiàng)組成數(shù)組傳遞給構(gòu)造方法的第四個(gè)參數(shù) driver_opts中,用來傳遞附加的調(diào)優(yōu)參數(shù)到PDO貨底層驅(qū)動(dòng)程序。一些常用的使用選項(xiàng)如表:
選項(xiàng)名 | 描述 |
PDO::ATTR_AUTOCOMMIT | 確定PDO是否關(guān)閉自定提交功能,設(shè)置FALSE值時(shí)關(guān)閉 |
PDO::ATTR_CASE | 強(qiáng)制PDO獲取的表字段字符的大小轉(zhuǎn)換,或遠(yuǎn)原樣使用列信息 |
PDO::ATTR_ERRMODE | 設(shè)置錯(cuò)誤處理的模式 |
PDO::ATTR_PERSISTENT | 確定連接是否為持久連接,默認(rèn)值為FALSE |
PDO::ATTR_ORACCLE_NULLS | 將返回的空字符串轉(zhuǎn)換為SQL的NULL |
PDO::ATTR_PREFETCH | 設(shè)置應(yīng)用程序提前獲取的數(shù)據(jù)大小,以K字節(jié)單位 |
PDO::ATTR_TIMEOUT | 設(shè)置超市之前等待的時(shí)間(秒數(shù)) |
PDO::ATTR_SERVER_INFO | 包含與數(shù)據(jù)庫特有的服務(wù)器信息 |
PDO::ATTR_SERVER_VERSION | 包含與數(shù)據(jù)庫服務(wù)器版本號(hào)有關(guān)的信息 |
PDO::ATTR_CLIENT_VERSION | 包含與數(shù)據(jù)庫客戶端版本號(hào)有關(guān)的信息 |
PDO::ATTR_CONNECTION_STATUS | 包含數(shù)據(jù)庫特有的與連接狀態(tài)有關(guān)的信息 |
設(shè)置選項(xiàng)名為下表組成的關(guān)聯(lián)數(shù)組,作為驅(qū)動(dòng)程序特定的連接選項(xiàng),傳遞給PDO構(gòu)造方法的第四各參數(shù)中,在下面的實(shí)例中使用連接選項(xiàng)創(chuàng)建持久連接,持久連接的好處是能夠避免在每個(gè)頁面執(zhí)行到打開和關(guān)閉數(shù)據(jù)庫服務(wù)器連接,速度更快,如 MySQL數(shù)據(jù)庫的一個(gè)進(jìn)程創(chuàng)建了兩個(gè)連接,PHP則會(huì)把原有連接與新的連接合并共享為一個(gè)連接,代碼如下:
<?php
$opt = array(PDO::ATTR_PERSISTENT =>true);
try{
$dbh = new PDO('mysql:host=localhost;dbname=test','dbuser','password',$opt); //使用$opt參數(shù)
}catch(PDOException $e){
echo '連接失敗:'.$e->getMessage();
}
?>
以上就是關(guān)于以多種方式調(diào)用構(gòu)造方法創(chuàng)建PDO對(duì)象的所有內(nèi)容,小伙伴們都理解了嗎?可以在自己本地試一試!
以上就是以多種方式調(diào)用構(gòu)造方法創(chuàng)建PDO對(duì)象的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!
學(xué)習(xí)教程快速掌握從入門到精通的SQL知識(shí)。