欢迎访问宙启技术站
智能推送

PHP基于PDO扩展操作mysql数据库示例

发布时间:2023-05-17 13:57:27

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数据库,包括插入、更新、删除、事务等操作。在事务中,只有所有操作都执行成功,才会最终提交事务。