PHP5及以上版本建议使用以下方式连接MySQL数据库:
- MySQLi extension这里的i意为improved
- PDO全称PHP Data Objects
在PHP早期版本中我们使用MySQL扩展,但该扩展在2012年开始不建议使用。
我该用MySQLi,还是PDO呢
如果你需要一个简短的回答,那就“习惯哪个就用哪个”
MySQLi和PDO有它们自己优势:PDO应用在12种不同数据库中,MySQLi只针对MySQL数据库。
所以,如果你的项目需在多种数据库中切换,建议用PDO,这样你只需要修改连接字符串和部分查询语句即可。如使用MySQLi,不同的数据库,需要重新编写所有代码,包括查询。
两者都是面向对象,但MySQLi提供了API接口。
两者都支持预处理语句。预处理语句可以防止SQL注入,对于web项目安全性是非常重要的。
MySQLi和PDO连接MySQL实例
我们用以下三种方式来演示PHP操作MySQL:
- MySQLi面向对象的方式
- MySQLi面向过程的方式
- PDO的方式
MySQLi面向对象的方式:
$servername = "localhost";
$username = "username";
$password = "password";
$conn = new mysqli($servername, $username, $password);
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
echo "连接成功";
?>
注意在上面向对象的实例中$connect_error是在PHP5.2.9和5.3.0中添加的。如果你需要兼容更早版本请使用以下代码替换:
- if (mysqli_connect_error()) {
- die("MySQL数据库连接失败: " . 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实例中我们已经指定了数据库myDB。PDO在连接过程需要设置数据库名。如果没有指定,则会抛出异常。
关闭连接
MySQLi面向对象的方式:
$conn->close();
MySQLi面向过程的方式:
mysqli_close($conn);
PDO的方式:
$conn = null;