PHP-MySQL鏈接問題

在使用PHP去鏈接MySQL數據庫時,有三種(流行的)方法: PHP-MySQL, PHP-MySQLi, PDO, 有一些須要注意的地方:php

1, 當咱們談論MySQL的時候,更多的是指關係型數據庫;mysql

2,PHP-MySQL和PHP-MySQLi是PHP語言中,爲了鏈接MySQL數據庫而開發的擴展,對應地帶有一套使用函數;web

3, 關於前兩種鏈接方式,除了傳統的區別,如:sql

mysql擴展是在 PHP 早期版本中的,但該擴展在 2012 年開始不建議使用。數據庫

① mysqli鏈接是永久鏈接,而MySQL是非永久鏈接。api

② mysql鏈接:每當第二次使用的時候,都會從新打開一個新的進程。mysqli鏈接:一直都只使用同一個進程。這樣就能夠很大程度的減輕服務器端壓力。固然,若是mysql也須要永久鏈接的話,就可使用mysql_pconnect()這個函數。安全

還存在其餘的區別,如:服務器

③ The mysql functions are procedural and use manual escaping.(mysql函數是過程化的,須要手動斷連)ide

④ mysqli is a replacement for the mysql functions, with object-oriented and procedural versions. It has support for prepared statements.(mysqli是mysql函數的一個替代品,是面向對象的,過程可視化,支持預處理語句。)補充:mysqli也能夠面向過程,支持事務,同時封裝了DB操做時的一些高級方法。函數

Use MySQLi over the older MySQL functions. The "i" stands for "improved". The list of improvements can be found in the docs(用mysqli而不是老掉牙的mysql函數,多出來的"i"表明"improved"(改進版),相應的改進點能夠在文檔中找到。)

 

4,關於PDO

PDO (PHP Data Objects) is a general database abstraction layer with support for MySQL among many other databases. It provides prepared statements, and significant flexibility in how data is returned.(PDO ,php數據對象,是一個通用的數據庫抽象層,支持mysql與不少其餘數據庫混用,它支持預處理語句而且在數據返回方面很是靈活。)

I would recommend using PDO with prepared statements. It is a well-designed API and will let you more easily move to another database (including any that supports ODBC) if necessary.(回答者推薦使用PDO,由於他是個設計優良的API,須要的話,你可以很是容易得遷移到其餘數據庫(包括任何支持ODBC的數據庫)上去。)

5,鏈接方式示例

MySQL面向過程鏈接

// 建立鏈接
$conn = mysql_connect($servername, $username, $password);

MySQLi面向過程

// 建立鏈接
$conn = mysqli_connect($servername, $username, $password);

MySQLi面向對象

// 建立鏈接
$conn = new mysqli($servername, $username, $password);

PDO鏈接

try {
    $conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
    echo "鏈接成功"; 
}
catch(PDOException $e)
{
    echo $e->getMessage();
}

 

5,MySQLi 和 PDO 的區別:

PDO 應用在 12 種不一樣數據庫中, MySQLi 只針對 MySQL 數據庫。

因此,若是你的項目須要在多種數據庫中切換,建議使用 PDO ,這樣你只須要修改鏈接字符串和部分查詢語句便可。 使用 MySQLi, 若是不一樣數據庫,你須要從新編寫全部代碼,包括查詢。

二者都是面向對象, 但 MySQLi 還提供了 API 接口。

二者都支持預處理語句。 預處理語句能夠防止 SQL 注入,對於 web 項目的安全性是很是重要的。

相關文章
相關標籤/搜索