PHP数据库函数:MySQLi和PDO扩展的使用方法
PHP作为Web开发语言之一,与MySQL数据库的结合使用是相当普遍的。PHP提供了两个核心扩展库MySQLi和PDO来进行数据库交互操作。本文将详细介绍这两个扩展库的概念、使用方法和优缺点,以供参考。
一、什么是MySQLi和PDO扩展
1. MySQLi扩展
MySQLi(MySQL improved extension)是对PHP中的MySQL扩展的增强版,可以完全支持MySQL 4.1及更高版本的特性。因此,当使用MySQL数据库时,建议使用MySQLi扩展。
2. PDO扩展
PDO(PHP Data Objects)是PHP中的一个抽象数据层,它提供了统一的访问不同数据库的接口。PDO提供了一组方法来访问多种数据库,包括MySQL、Oracle、PostgreSQL和SQLite等。因此,如果需要支持多个数据库,建议使用PDO扩展。
二、MySQLi扩展的使用方法
1. 连接MySQL数据库
在使用MySQLi连接MySQL数据库之前,需要了解四个关键信息:主机名、用户名、密码和数据库名。连接方法如下:
$servername = "localhost";
$username = "root";
$password = "password";
$dbname = "myDB";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
2. 查询MySQL数据库
查询(SELECT)MySQL数据库时,可以使用mysqli_query()函数或mysqli_prepare()和mysqli_stmt_execute()函数。其中,mysqli_query()函数返回查询结果集的对象,可以使用mysqli_fetch_array()或mysqli_fetch_assoc()函数提取数据。
$sql = "SELECT * FROM myTable";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["name"]. " " . $row["age"]. "<br>";
}
} else {
echo "0 结果";
}
3. 插入MySQL数据库
插入(INSERT)MySQL数据库时,可以使用mysqli_query()函数或mysqli_prepare()和mysqli_stmt_execute()函数。其中,mysqli_query()函数返回布尔值,表示插入操作是否成功。
$sql = "INSERT INTO myTable (name, age, hobby) VALUES ('John', '18', 'swimming')";
if ($conn->query($sql) === TRUE) {
echo "新记录插入成功";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
4. 更新MySQL数据库
更新(UPDATE)MySQL数据库时,可以使用mysqli_query()函数或mysqli_prepare()和mysqli_stmt_execute()函数。其中,mysqli_query()函数返回布尔值,表示更新操作是否成功。
$sql = "UPDATE myTable SET age='20' WHERE name='John'";
if ($conn->query($sql) === TRUE) {
echo "记录更新成功";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
5. 删除MySQL数据库
删除(DELETE)MySQL数据库时,可以使用mysqli_query()函数或mysqli_prepare()和mysqli_stmt_execute()函数。其中,mysqli_query()函数返回布尔值,表示删除操作是否成功。
$sql = "DELETE FROM myTable WHERE name='John'";
if ($conn->query($sql) === TRUE) {
echo "记录删除成功";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
三、PDO扩展的使用方法
1. 连接MySQL数据库
在使用PDO连接MySQL数据库之前,需要了解四个关键信息:主机名、用户名、密码和数据库名。连接方法如下:
$servername = "localhost";
$username = "root";
$password = "password";
$dbname = "myDB";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "连接成功";
} catch(PDOException $e) {
echo "连接失败: " . $e->getMessage();
}
2. 查询MySQL数据库
查询(SELECT)MySQL数据库时,可以使用query()函数或prepare()和execute()函数。其中,query()函数返回查询结果集的对象,可以使用fetchAll()或fetch()函数提取数据。
$sql = "SELECT * FROM myTable";
$result = $conn->query($sql);
if ($result->rowCount() > 0) {
$rows = $result->fetchAll(PDO::FETCH_ASSOC);
foreach ($rows as $row) {
echo "id: " . $row['id']. " - Name: " . $row['name']. " " . $row['age']. "<br/>";
}
} else {
echo "0 结果";
}
3. 插入MySQL数据库
插入(INSERT)MySQL数据库时,可以使用query()函数或prepare()和execute()函数。其中,query()函数返回布尔值,表示插入操作是否成功。
$sql = "INSERT INTO myTable (name, age, hobby) VALUES ('John', '18', 'swimming')";
if ($conn->query($sql)) {
echo "新记录插入成功";
} else {
echo "Error: " . $sql . "<br>" . $conn->errorInfo()[2];
}
4. 更新MySQL数据库
更新(UPDATE)MySQL数据库时,可以使用query()函数或prepare()和execute()函数。其中,query()函数返回布尔值,表示更新操作是否成功。
$sql = "UPDATE myTable SET age='20' WHERE name='John'";
if ($conn->query($sql)) {
echo "记录更新成功";
} else {
echo "Error: " . $sql . "<br>" . $conn->errorInfo()[2];
}
5. 删除MySQL数据库
删除(DELETE)MySQL数据库时,可以使用query()函数或prepare()和execute()函数。其中,query()函数返回布尔值,表示删除操作是否成功。
$sql = "DELETE FROM myTable WHERE name='John'";
if ($conn->query($sql)) {
echo "记录删除成功";
} else {
echo "Error: " . $sql . "<br>" . $conn->errorInfo()[2];
}
四、MySQLi和PDO扩展的优缺点
MySQLi扩展和PDO扩展各有优缺点。根据实际业务场景需求,可以选择适用的扩展。
1. MySQLi扩展的优缺点
优点:
- 支持MySQL 4.1及以上版本的特性;
- 支持MySQL编程中的面向对象和面向过程两种编程模式;
- 查询速度较快。
缺点:
- 只支持MySQL数据库;
- 查询结果需要手动处理,开发效率较低;
- 代码容易出现SQL注入漏洞。
2. PDO扩展的优缺点
优点:
- 支持多种数据库,包括MySQL、Oracle、PostgreSQL和SQLite等;
- 简化了数据访问层的编程,提高了开发效率;
- 防止SQL注入漏洞。
缺点:
- 不支持MySQL编程中的面向对象和面向过程两种编程模式;
- 查询速度相对较慢。
总的来说,在实际开发中,如果开发的应用只需要支持一种数据库(如MySQL),使用MySQLi扩展会更为简单和高效;而如果需要支持多种数据库,或需要更高的安全性,使用PDO扩展是更好的选择。
