我們為什麼要使用PDO進行PHP程式開發?

2021-05-08 02:42:49 字數 1796 閱讀 4310

pdo擴充套件為php定義了乙個訪問資料庫的輕量的,持久的介面。實現了pdo介面的每一種資料庫驅動都能以正則擴充套件的形式把他們各自的特色表現出來。注意;利用pdo擴充套件本身並不能實現任何資料庫函式。你必須使用乙個特定的資料庫pdo驅動去訪問資料庫。

pdo提供了乙個資料訪問抽象層,這就意味著,不管你使用的是哪種資料庫,你都可以用同樣的函式去進行查詢的獲取資料。pdo並不提供資料提取,它不會重寫sql語句,或者模仿這些功能。你需要使用乙個成熟的提取層,如果你需要的話。怎麼樣,是不是看了譯文就有一種恍然大悟的感覺了?

沒有?

那說的再詳細點。

我們為什麼要使用pdo?

1、更換資料庫時取得極大便利

在php4/3時代,php要利用php_mysql.dll、php_pgsql.dll、php_mssql.dll、php_sqlite.dll等等擴充套件來連線mysql、postgresql、ms sql server、sqlite,這其實也沒什麼。也就是在配置時多添句話就行了。

可怕的是,這些擴充套件和各自對應的資料庫打交道時,他們各自的函式有很多是不一樣的。

比如:

php利用libmysql.dll和mysql打交道時,如果要從資料表中提取資料作為關聯陣列,用的是mysql_fetch_accoc,而如果要從postgre資料庫取得同樣的結果,你就不得不用pg_fetch_assoc。

很簡單的例子說明了很重要的問題,假如你要更換資料庫型別,比如從mysql更換成postgre,你就不得把你所有和資料庫有關的程式都改一遍。這時候,你應該會明白,為什麼我不用pdo??

2、極大提高程式執行效率

針對上面的情況,也許你會說,我可以使用adodb(lite),pear::db來實現對不同型別資料庫函式的封裝啊。這樣子,即使我更換資料庫,也不需要修改程式。

答:php**的效率怎麼能夠和直接用c/c++寫的擴充套件效率比較呢?根本不是乙個數量級的。

ok,從現在開始用pdo進行你的開發吧。

$hostname    =    "localhost";    //指定主機名

$database    =    "db_book";        //指定資料庫名稱

$usernmae    =    "root";            //指定使用者名稱

$password    =    "44444";    //指定密碼

$dsn = "mysql:dbname=" . $database . ";host=" . $hostname;

//資料來源描述

try

catch (pdoexception $e)

$sql = "select * from tb_books";

//查詢字串

echo "

"; //使用文字格式輸出    

$conn->setattribute(pdo::attr_case, pdo::case_lower); //使用小寫鍵名 upper就是大寫

$rs = $conn->prepare($sql);

//這個函式我理解應該是個用來建立類似持久連線的函式吧

$rs->execute();   

//這是乙個可以帶引數的函式,可使用變數替換查詢時語句的特定標識

//如果不帶引數則直接執行語句

//可以提高查詢效率 具體看參考手冊的介紹 pdo functions 章節

while ($row = $rs->fetch(pdo::fetch_assoc)) ;

echo "

";

?>

我們為什麼要使用PDO進行PHP程式開發?

pdo擴充套件為php定義了乙個訪問資料庫的輕量的,持久的介面。實現了pdo介面的每一種資料庫驅動都能以正則擴充套件的形式把他們各自的特色表現出來。注意 利用pdo擴充套件本身並不能實現任何資料庫函式。你必須使用乙個特定的資料庫pdo驅動去訪問資料庫。pdo提供了乙個資料訪問抽象層,這就意味著,不管...

為什麼我們要使用JNDI?

個人理解 就像某些配置如果我們嵌入到 中,每當配置需要改動的時候就不得不改動 重新編譯,使用jndi可以讓我們使用外部配置的方式進行引數配置以實現其解耦。下面這個例子就是使用資料庫驅動是否使用jndi的解耦。直接使用jdbc或者通過jndi引用資料來源的程式設計 量相差無幾,但是現在的程式可以不用關...

為什麼我們要使用DTO

乙個完整的業務是通過領域實體 物件 domain建立的,而dto是根據ui的需求來設計的。比如 customer領域物件可能會包含一些諸如firstname,lastname,email,address等資訊。但如果ui上不打算顯示address的資訊,那麼customerdto中也無需包含這個 a...