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日

相关文章

  • linux下安装php扩展memcache的方法

    下面是详细的讲解“linux下安装php扩展memcache的方法”的完整攻略。 1. 检查是否安装了memcached 在安装php扩展memcache之前,需要检查是否已经安装了memcached服务端和客户端。可以通过以下命令来检查: $ whereis memcached $ whereis memcachedb 如果显示类似于/usr/bin/me…

    database 2023年5月18日
    00
  • MySQL — 练习题

      一. 表关系 1. 创建如下表,并创建相关约束.   # 创建班级表 create table class ( cid int primary key not null auto_increment, caption varchar(20) not null ); # 创建老师表 create table teacher ( tid int primar…

    MySQL 2023年4月13日
    00
  • MySQL字段为 NULL的5大坑

    下面是“MySQL字段为 NULL的5大坑”的完整攻略: 1. NULL值的比较 NULL值在比较时需要用 IS NULL 或者 IS NOT NULL,而不能用 = 或者 <>。因为NULL值不等于任何值,包括它自己。 例如,假设我们有一个名为users的表,其中有一个名为age的字段,其中有一个用户的年龄是NULL,那么以下查询均不能正确查询…

    database 2023年5月22日
    00
  • DBMS 事务状态

    DBMS(数据库管理系统)中的事务状态是指事务在执行过程中的不同阶段的状态。在DBMS中,事务具有原子性、一致性、隔离性和持久性(ACID)这四个特性,事务状态的管理是保证事务能够可靠执行的基础。 下面是事务状态的完整攻略: 1. 事务状态的定义 事务状态是指事务在执行过程中,从开始到最终提交或回滚,经历了哪些具体的状态变化。常见的事务状态有五种:活动状态、…

    database 2023年3月27日
    00
  • 优化 SQL Server 索引的小技巧

    优化SQL Server索引是优化数据库性能的关键之一。以下是一些小技巧可以帮助您更好地优化SQL Server索引。 1. 执行索引维护 对于经常更新的表,索引可能会变得损坏或不完整。执行索引维护可回收空间,优化索引,并且可以提高查询性能。SQL Server提供了内置的过程,例如“sp_msforeachtable”,可以为数据库中的所有表执行索引维护。…

    database 2023年5月19日
    00
  • Neo4j和SQLite的区别

    Neo4j和SQLite都是常见的数据库管理系统,它们在以下几个方面有很大的区别: 数据表结构 SQLite是关系型数据库,其数据表结构由列和行组成,每个行代表一个实例化的实体,每个列则代表一种属性。而Neo4j则是图形数据库,它包含节点和关系,节点代表实体,关系表示实体之间的关联关系。节点之间还可以添加属性用于描述这些实体。 举个例子,假设我们有一个学生数…

    database 2023年3月27日
    00
  • 恢复MySQL密码笔记

    恢复MySQL密码通常包括两种情况:忘记了root账户密码和重置普通用户密码。下面我将分别介绍这两种情况的解决方案。 忘记root密码 第一步:停止MySQL服务 在开始我们的讲解之前,需要先停止MySQL服务。在Linux下,可以使用以下命令: sudo systemctl stop mysql 在Windows下,可以使用以下命令: net stop m…

    database 2023年5月22日
    00
  • SQL 分隔数据转换为多值IN列表

    当我们在进行 SQL 查询时,有时候需要将一个字段中的多个值以 IN 列表的方式传递给查询语句中的 IN 关键字。这时候,我们需要将该字段中的每个元素进行分割然后组成一个 IN 列表,这就是分隔数据转换为多值 IN 列表的操作。下面我们将介绍两个实例,分别用 MySQL 和 PostgreSQL 实现。 MySQL 中的分隔数据转换为多值 IN 列表 假设我…

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