PHP基于PDO扩展操作mysql数据库示例
PHP是一种优秀的服务器端脚本语言,而数据库是服务器端常用的存储数据的方式。Mysql数据库是一种非常流行的关系型数据库,被广泛应用于Web开发中。本文将介绍如何使用PHP的PDO扩展对Mysql数据库进行操作。
一、PDO介绍
PDO(PHP Data Objects)是PHP的一个扩展库,它提供了一个统一的API(应用程序接口),可以访问多种数据库。与传统的mysql扩展库相比,PDO具有诸多优点:
1. 支持多种数据库,如Mysql, Oracle, PostgreSQL等。
2. PDO采用了对象的方式进行封装,具有更好的可扩展性和易用性。
3. PDO支持预处理,可以有效地避免SQL注入攻击。
4. PDO使用异常处理,可以更好地处理错误。
二、PDO连接Mysql数据库
使用PDO连接Mysql数据库,需要在PHP配置文件中启用PDO扩展,和Mysql扩展。在php.ini文件中,找到并修改如下两个选项:
extension=php_pdo.dll
extension=php_pdo_mysql.dll
连接Mysql数据库的步骤如下:
1. 创建PDO对象
$dsn = 'mysql:host=localhost;dbname=test;charset=utf8';
$username = 'root';
$password = '123456';
try {
$pdo = new PDO($dsn, $username, $password);
} catch (PDOException $e) {
echo '连接失败:' . $e->getMessage();
}
2. 设置PDO属性
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
上面的代码中,我们设置了PDO的两个属性。 个属性是错误处理模式,我们设置为异常模式,这样可以使用try-catch语句处理异常。第二个属性是默认的数据提取方式,我们设置为关联数组方式,这样可以在使用fetch方法获取数据时,以字段名作为数组的键。
三、PDO查询Mysql数据库
使用PDO查询Mysql数据库,需要创建PDOStatement对象,并执行查询语句。查询语句可以是原生的SQL语句,也可以使用PDO的预处理语句。
1. 执行原生查询语句
$sql = "SELECT * FROM users WHERE age > 18";
try {
$statement = $pdo->query($sql);
$result = $statement->fetchAll();
} catch (PDOException $e) {
echo '查询失败:' . $e->getMessage();
}
上面的代码中,我们执行了一条原生的SQL语句,查询年龄大于18岁的所有用户信息。使用PDO的query方法执行查询语句,并获取PDOStatement对象,再使用PDOStatement的fetchAll方法获取查询结果。
2. 执行预处理语句
$sql = "SELECT * FROM users WHERE age > ?";
try {
$statement = $pdo->prepare($sql);
$statement->execute([18]);
$result = $statement->fetchAll();
} catch (PDOException $e) {
echo '查询失败:' . $e->getMessage();
}
上面的代码中,我们使用PDO的预处理语句,查询年龄大于18岁的所有用户信息。首先使用PDO的prepare方法创建PDOStatement对象,并传入预处理语句,然后使用PDOStatement的execute方法执行预处理语句,并传入参数值,最后使用PDOStatement的fetchAll方法获取查询结果。
四、PDO操作Mysql数据库
使用PDO操作Mysql数据库,包括插入、更新、删除、事务等操作。
1. 插入数据
$sql = "INSERT INTO users(name, age, gender) VALUES(?, ?, ?)";
try {
$pdo->beginTransaction();
$statement = $pdo->prepare($sql);
$statement->execute(['Tom', 20, 'male']);
$statement->execute(['Lucy', 18, 'female']);
$pdo->commit();
} catch (PDOException $e) {
$pdo->rollBack();
echo '插入失败:' . $e->getMessage();
}
上面的代码中,我们使用PDO的预处理语句,向表中插入两条记录。首先使用PDO的beginTransaction方法开启一个事务,然后使用PDO的prepare方法创建PDOStatement对象,并传入预处理语句。接着使用PDOStatement的execute方法执行预处理语句,并传入参数值。最后使用PDO的commit方法提交事务,或使用PDO的rollBack方法回滚事务。
2. 更新数据
$sql = "UPDATE users SET name = ? WHERE id = ?";
try {
$statement = $pdo->prepare($sql);
$statement->execute(['Jerry', 1]);
$statement->execute(['Mary', 2]);
$affectedRows = $statement->rowCount();
} catch (PDOException $e) {
echo '更新失败:' . $e->getMessage();
}
上面的代码中,我们使用PDO的预处理语句,更新表中两条记录的姓名。首先使用PDO的prepare方法创建PDOStatement对象,并传入预处理语句。然后使用PDOStatement的execute方法执行预处理语句,并传入参数值。最后使用PDOStatement的rowCount方法获取更新记录的数量。
3. 删除数据
$sql = "DELETE FROM users WHERE name = ?";
try {
$statement = $pdo->prepare($sql);
$statement->execute(['Jerry']);
$statement->execute(['Mary']);
$affectedRows = $statement->rowCount();
} catch (PDOException $e) {
echo '删除失败:' . $e->getMessage();
}
上面的代码中,我们使用PDO的预处理语句,删除表中两条记录。首先使用PDO的prepare方法创建PDOStatement对象,并传入预处理语句。然后使用PDOStatement的execute方法执行预处理语句,并传入参数值。最后使用PDOStatement的rowCount方法获取删除记录的数量。
4. 事务操作
$pdo->beginTransaction();
try {
// 执行一些操作
$pdo->commit();
} catch (PDOException $e) {
$pdo->rollBack();
echo '操作失败:' . $e->getMessage();
}
上面的代码中,我们使用PDO的beginTransaction方法开启一个事务,然后在try-catch语句中执行一些操作。如果操作执行失败,就使用PDO的rollBack方法回滚事务。如果操作执行成功,就使用PDO的commit方法提交事务。在事务中,只有所有操作都执行成功,才会最终提交事务。
五、总结
本文介绍了如何使用PHP的PDO扩展操作Mysql数据库。PDO提供了一个统一的API,可以访问多种数据库,具有更好的可扩展性和易用性。使用PDO连接Mysql数据库,需要设置PDO属性。使用PDO查询Mysql数据库,可以执行原生查询语句和预处理语句,获取PDOStatement对象,并获取查询结果。使用PDO操作Mysql数据库,包括插入、更新、删除、事务等操作。在事务中,只有所有操作都执行成功,才会最终提交事务。
