PDO

PDO(PHP 数据对象),是 PHP 中的一个扩展库,用来操作数据库

使用 PDO 之前首先要确保 PHP 中安装了 PDO 这个扩展,我们可以使用以下两种方法来查看本地的 PHP 中是否安装了 PDO 扩展,同时要打开pdo_mysql扩展。

  1. 使用 phpinfo() 函数并在浏览器查看
  2. 在命令行中执行 php -m 查看是否有 pdo 扩展

PDO 中一共提供了三个类
PDO 类:PDO 的核心,主要负责连接数据、发送 SQL 语句等。
PDOStatement 类:主要用于解析结果集、实现预处理、事务等。
PDOException 类:主要用来代表 PDO 的异常。

PDO的基本用法

连接数据库

创建 PDO 的对象,就是连接数据库

1
2
3
4
5
6
7
8
9
10
11
try{
//连接数据库
$pdo = new \PDP('mysql:host=IP地址;dbname=数据库名;','用户名','密码');
//设置编码
$pdo ->exec("set names utf8");


}catch(PDOException $e){
var_dump($e->getMessage());
exit();
}

断开连接

1
2
3
$pdo = null;
#或
unset($pdo);

exec() 方法

当要执行 insert、update、delete 等非 select 的语句时可以使用 PDO 类中提供的 exec 方法:

1
2
3
4
$pdo->exec($sql);
//1.成功时返回受影响的条数,有可能值为 0。
//2. 失败时返回 false。
//3.在判断是否执行成功时应该使用 === 来判断。

query() 方法

当要执行 select 从表中获取数据时,需要使用以下类方法

1
2
3
$pdo->query($sql);
//1. 如果执行成功返回 PDOStatement 类的对象。
//2. 如果失败返回 false

执行完 select 语句之后,PDO 会把数据保存到PDOStatement 类对象中返回,我们还需要使用这个类中的几个方法来获取数据

1
2
3
4
5
6
7
8
9
10
11
$stmt = $pdo->query($sql);
$stmt->rowCount(); // 返回记录数
$stmt->columnCount(); // 返回列数
$stmt->fetch([数据样式]); // 取出一条记录(执行一次取出一条)
$stmt->fetchAll([数据样式])// 取出所有记录
//数据样式
// PDO::FETCH_ASSOC : 返回关联数组(较常用)
//PDO::FETCH_BOTH :返回混合数组
//PDO::FETCH_NUM :返回索引数组
//PDO::FETCH_OBJ :返回对象
//PDO::FETCH__COLUMN :返回某一列的值

其他方法

1
2
$id = $pdo->lastInsertId() // 返回新插入的记录的 id
$err =$pdo->errorInfo() // 如果失败,返回包含错误信息的数组

预处理

预处理是另一种高级的执行 SQL 语句的方式。和前面学习的执行 SQL 语句的方式相比,预处理有以下两个好处
➢ 执行 SQL 语句的速度更快。
➢ 这种方式更加的安全(对数据过滤,防止 SQL 注入)

因为预处理有很多好处,所以我们以后尽量都使用预处理的方式来执行 SQL 语句。

使用预处理的方式执行 SQL 语句主要分为两步:

  1. 先用 prepare 预执行 SQL 语句。
  2. 绑定数据并执行
    预执行
    1
    2
    3
    4
    5
    $sql= 'insert into test values(?,?)';
    //数据部分需要用?来代替,或用':字段名'来代替
    //$sql= 'insert into test values(:name,:age)';

    $stmt = $pdo->prepare($sql)

绑定数据并执行

1
2
3
4
5
6
7
8
$stmt->execute([
tom,
19
]);
/*$stmt->execute([
:name=>'tom',
:age=19
]);*/

事物

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//设置异常模式
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
try
{
//开启事务
$pdo ->beginTransaction();
//执行的SQL语句
//提交
$pdo->commit();
}
catch(Exception $e)
{
//抓住try里面出现的错误,并且处理
//echo $e->getMessage(); //获取异常信息
//回滚
$pdo->rollBack();
}

PDO属性

1
2
$pdo->setAttribute(属性名,属性值); // 设置属性值
$pdo->getAttribute(属性名); // 获取属性值

属性列表
PDO 中可以设置的属性非常多

我们只先学习其中最常用的两个属性。
获取数据模式
我们可以使用 fetch 和 fetchAll 两个方法提取数据,在提供数据时可以通过参数设置提取模式:
错误模式

我们在执行每个操作时,都要考虑这个操作是否成功,如果失败了我们需要做相应的错误处理

但是,目前不同的操作错误处理的默认方式又是不同的,比如,连接数据库时如果失败会抛出 PDOException 异常,而其他操作失败时会返回 false。这就导致我们需要使用不同的方式
来处理错误。

我们可以通过错误模式属性,设置所有的错误模式相同,这样我们就可以写出统一的错误处
理代码。

 评论



本站使用 Material X 作为主题 , 总访问量为 次 。
隐藏