php pdo操作数据库示例

下面是关于PHP PDO操作数据库的攻略:

前置知识

在先介绍示例之前,我们需要先了解一些PHP PDO操作数据库的前置知识:

  1. PDO是PHP的本地数据访问层(支持多种数据库);
  2. PDO具有防止SQL注入攻击的能力,并提供了更好的错误处理机制;
  3. PDO通过PDOStatement对象执行SQL语句。

示例一

下面我们以连接MySQL数据库为例,展示如何通过PHP PDO操作数据库。

首先,我们需要创建一个数据库连接:

<?php
// 连接数据库
$host = 'localhost';
$dbname = 'example';
$username = 'root';
$password = '';
$dsn = "mysql:host=$host;dbname=$dbname;charset=utf8mb4";
$options = [
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES => False,
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
];
try {
    $pdo = new PDO($dsn, $username, $password, $options);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}
?>

上述代码中,我们首先定义了数据库的连接参数,然后使用PDO的构造函数创建了一个$pdo对象,如果连接失败,会显示连接错误信息。

接下来,我们来学习如何执行SQL语句。

查询操作

下面我们以查询操作为例,演示如何执行SQL语句。

<?php
// SQL查询操作
$stmt = $pdo->query('SELECT * FROM users');
while ($row = $stmt->fetch()) {
    echo $row['name'] . "\n";
}
?>

上述代码中,我们使用PDOStatement::fetch() 函数从结果集中获取一行。

要注意的是,在PDO中有三种获取数据的方式:PDOStatement::fetch(), PDOStatement::fetchAll() 和 PDOStatement::fetchColumn()。这三种方法分别获取单个行,全部行,或者列的单个值。根据需要来选择相应的方法。

插入操作

如果你想要插入一条记录,代码如下:

<?php
// SQL插入操作
$sql = "INSERT INTO users (name, email) VALUES ('John', 'john@example.com')";
$pdo->exec($sql);
?>

需要注意的是,PDO的PDO::exec() 函数返回的是影响行数,并且不支持绑定参数,使用该函数时需谨慎,防止SQL注入攻击。

示例二

接下来,我们通过SQLite数据库来演示更多操作。

首先,我们还是需要创建一个数据库连接:

<?php
// 连接数据库
$dbname = 'example.db';
$dsn = "sqlite:$dbname";
$options = [
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES => False,
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
];
try {
    $pdo = new PDO($dsn, '', '', $options);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}
?>

接着,我们来演示更多操作:

绑定查询参数

可以使用PDOStatement::bindParam() 或者PDOStatement::bindValue()绑定查询参数。

下面是bindParam()的示例代码:

<?php
// SQL绑定查询参数操作
$stmt = $pdo->prepare('SELECT * FROM users WHERE name = :name');
$stmt->bindParam(':name', $name);
$name = 'John';
$stmt->execute();
$result = $stmt->fetchAll();
?>

上述代码中,我们首先使用PDO::prepare()函数实例化了一个PDOStatement对象,接着使用PDOStatement::bindParam() 函数绑定了$name变量,并把变量$name的值设置为'John',最后通过PDOStatement::fetchAll() 函数获取所有查找的结果。

事务处理

在使用PHP PDO操作数据库时,我们经常需要使用事务来确保原子性操作,错误处理和数据完整性。

下面的代码展示如何使用PDO的beginTransaction()、commit()、和rollBack() 来实现事务处理:

<?php
// PDO事务处理的操作
try {
    $pdo->beginTransaction();

    $sql = "INSERT INTO users (name, email) VALUES ('John', 'john@example.com')";
    $pdo->exec($sql);

    $sql = "UPDATE users SET email='john_doe@example.com' WHERE name='John'";
    $pdo->exec($sql);

    $pdo->commit();
} catch (PDOException $e) {
    $pdo->rollBack();
    echo "Error: " . $e->getMessage();
}
?>

在上述代码中,我们使用PDO::beginTransaction()开启了一个事务,然后插入一条记录并更新一条记录,最后使用PDO::commit()提交事务,如果提交事务失败则会回滚操作。

结语

以上就是关于PHP PDO操作数据库示例的完整攻略,至此您应该已经掌握如何操作PDO来连接数据库以及执行增删改查等操作。提供给初学者参考和学习。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php pdo操作数据库示例 - Python技术站

(1)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • Node.js动手撸一个静态资源服务器的方法

    以下是Node.js动手撸一个静态资源服务器的完整攻略: 什么是静态资源服务器 静态资源服务器是一个可以将静态文件(如 HTML,CSS,JavaScript,图片等)通过 HTTP 服务器向客户端提供这些文件的服务器。这种服务器通常是非常简单的,只是通过 HTTP 将文件发送给客户端,而不做任何处理。 构建静态资源服务器 要构建一个静态资源服务器,需要完成…

    database 2023年5月22日
    00
  • 基于Mongodb分布式锁解决定时任务并发执行问题

    基于Mongodb分布式锁解决定时任务并发执行问题 分布式系统中,多台应用服务器可能同时执行同一个定时任务,导致重复执行或者并发执行的问题。为了解决此类问题,我们可以考虑使用分布式锁机制来协调不同服务器之间的定时任务执行。 Mongodb是一个分布式文档数据库,它支持分布式锁机制,可以很方便地用于解决上述问题。 具体操作步骤如下: 连接 Mongodb 数据…

    database 2023年5月22日
    00
  • MySQL冷备份所需物理文件

    MySQL冷备份是一种备份方式,它的特点是备份过程中数据库不会被访问或修改。这种备份方式可以在数据库运行期间进行,不会对正常业务产生影响,并且备份文件的大小、恢复速度、稳定性都比较好。 在进行MySQL冷备份时,需要备份一些物理文件。 数据库文件 MySQL的数据库文件通常存储在数据目录下,这些文件包括数据文件(.frm、.ibd等)和日志文件(.ib_lo…

    MySQL 2023年3月10日
    00
  • IBM DB2 和 Maria DB 的区别

    IBM DB2和MariaDB都是关系型数据库管理系统(RDBMS),但是它们有着不同的特点和用途。 IBM DB2 IBM DB2是一个功能强大的商业级关系型数据库管理系统,适合企业级应用。它支持多个操作系统和平台,具有高可靠性、高安全性和高性能等特点。 特点 支持ACID事务。 支持分布式数据库。 支持复杂查询和数据分析。 提供了高度可靠的备份和恢复功能…

    database 2023年3月27日
    00
  • spring boot中内嵌redis的使用方法示例

    下面给出关于“spring boot中内嵌redis的使用方法示例”的完整攻略。 1. 前置条件 在使用内嵌Redis的过程中,需要保证以下两个条件已经满足: 已经安装了Redis数据库,并且Redis服务已经启动。 已经使用Spring Boot初始化了项目。 2. 引入Redis依赖 首先,我们需要在项目的pom.xml文件中引入Redis的依赖: &l…

    database 2023年5月22日
    00
  • ARM64架构下安装mysql5.7.22的全过程

    下面是ARM64架构下安装mysql5.7.22的全过程攻略。 步骤一:安装依赖库 执行sudo apt update更新包列表 执行sudo apt install libaio1安装依赖库 步骤二:下载Mysql 5.7.22 下载mysql5.7.22文件 解压缩文件:tar -xvf mysql-server_5.7.22-1ubuntu16.04_…

    database 2023年5月22日
    00
  • 各种路由器的默认密码

    路由器是连接你的设备和互联网的交点,每个路由器都会有一个管理界面,需要输入账号和密码才能登录管理。然而,很多用户未曾更改默认的账号和密码就直接使用,这样会给黑客留下可乘之机。以下是关于各种路由器默认密码的攻略,希望对大家有所帮助。 一、如何找到路由器默认密码 查找路由器的默认用户名和密码通常可以在路由器的文档中找到,或者通过到路由器制造商的网站搜索找到。各大…

    database 2023年5月22日
    00
  • Oracle基本PLSQL的使用实例详解

    Oracle基本PLSQL的使用实例详解 什么是PL/SQL PL/SQL (Procedural Language/Structured Query Language) 是 Oracle 数据库自带的一种过程性编程语言,它结合了 SQL 语言的数据操作能力和传统程序设计语言(C,C++等)的结构化编程功能,适合于复杂的数据处理任务。它可以完成数据库的管理、…

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部