背景
从PHP5 及之后,能够连接的数据库的只有如下两种方法:
- MySQLi extension(i代表提高)
- PDO (PHP Data Objects)
更早的版本可以用mysql库来连接mysql数据库,但是mysql 库在2012年就被遗弃了,官方不在进行维护。
如何选择?
概括的回答就是,你喜欢就好。开个玩笑,下面看下这两个特点:
- PDO 这种连接方法,可以连接12种数据库,然而mysqli只能连接MYSQL及其分支,例如MariaDB。
如果在你的项目中有切换连接不同数据库的需求,你可以考虑下PDO,那将会让过程变得很简单,只需要重写一些查询命令,但是如果你用的mysqli,那你可能要重构整个代码。 - 两者都支持面向对象,但是mysqli还支持面向过程
- 都支持预编译语句,都可以很好防止mysql注入,大大提高了项目的安全性
语法
面向对象的mysqli
<?php
$servername = "localhost";
$username = "username";
$password = "password";
// Create connection
$conn = new mysqli($servername, $username, $password);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
?>
面向过程的mysqli
<?php
$servername = "localhost";
$username = "username";
$password = "password";
// Create connection
$conn = mysqli_connect($servername, $username, $password);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?>
面向对象的pdo
<?php
$servername = "localhost";
$username = "username";
$password = "password";
try {
$conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected successfully";
}
catch(PDOException $e)
{
echo "Connection failed: " . $e->getMessage();
}
?>
关闭连接
mysqli 和 pdo 都会在程序运行完成后自动关闭连接,如果想提前关闭,请使用如下方法
$conn->close(); //面向对象的mysqli
mysqli_close($conn); // 面向过程的mysqli
$conn = null; // pdo