PHP5及以上版本建議使用以下方式連接MySQL數(shù)據(jù)庫:
- MySQLi extension這里的i意為improved
- PDO全稱PHP Data Objects
在PHP早期版本中我們使用MySQL擴(kuò)展,但該擴(kuò)展在2012年開始不建議使用。
我該用MySQLi,還是PDO呢
如果你需要一個(gè)簡短的回答,那就“習(xí)慣哪個(gè)就用哪個(gè)”
MySQLi和PDO有它們自己優(yōu)勢:PDO應(yīng)用在12種不同數(shù)據(jù)庫中,MySQLi只針對(duì)MySQL數(shù)據(jù)庫。
所以,如果你的項(xiàng)目需在多種數(shù)據(jù)庫中切換,建議用PDO,這樣你只需要修改連接字符串和部分查詢語句即可。如使用MySQLi,不同的數(shù)據(jù)庫,需要重新編寫所有代碼,包括查詢。
兩者都是面向?qū)ο?,但MySQLi提供了API接口。
兩者都支持預(yù)處理語句。預(yù)處理語句可以防止SQL注入,對(duì)于web項(xiàng)目安全性是非常重要的。
MySQLi和PDO連接MySQL實(shí)例
我們用以下三種方式來演示PHP操作MySQL:
- MySQLi面向?qū)ο蟮姆绞?/li>
- MySQLi面向過程的方式
- PDO的方式
MySQLi面向?qū)ο蟮姆绞剑?/p>
$servername = "localhost";
$username = "username";
$password = "password";
$conn = new mysqli($servername, $username, $password);
if ($conn->connect_error) {
die("連接失敗: " . $conn->connect_error);
}
echo "連接成功";
?>
注意在上面向?qū)ο蟮膶?shí)例中$connect_error是在PHP5.2.9和5.3.0中添加的。如果你需要兼容更早版本請(qǐng)使用以下代碼替換:
- if (mysqli_connect_error()) {
- die("MySQL數(shù)據(jù)庫連接失敗: " . mysqli_connect_error());
- }
MySQLi面向過程的方式:
$servername = "localhost";
$username = "username";
$password = "password";
$conn = mysqli_connect($servername, $username, $password);
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "連接成功";
?>
PDO的方式:
$servername = "localhost";
$username = "username";
$password = "password";
try {
$conn = new PDO("mysql:host=$servername;", $username, $password);
echo "連接成功";
}
catch(PDOException $e)
{
echo $e->getMessage();
}
?>
注意在以上PDO實(shí)例中我們已經(jīng)指定了數(shù)據(jù)庫myDB。PDO在連接過程需要設(shè)置數(shù)據(jù)庫名。如果沒有指定,則會(huì)拋出異常。
關(guān)閉連接
MySQLi面向?qū)ο蟮姆绞剑?/p>
$conn->close();
MySQLi面向過程的方式:
mysqli_close($conn);
PDO的方式:
$conn = null;