使用PHP PDO操作MySQL数据库

PHP 数据对象 (PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口。PDO 提供了一个数据访问抽象层,这意味着,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据。

使用PDO的好处

  • 编码一致性:PDO支持多种数据库扩展,并为其提供统一的访问接口
  • 灵活性:PDO提供了统一的SQL操作方法和属性
  • 高效性:PDO是用C编写、PHP编译的
  • 面向对象:PDO完全采纳面向对象的思想

连接MySQL数据库

<?php
$user = "root";
$pwd = "";
$host = 'localhost';
$dbname = 'rk_osc';
$dsn = "mysql:host={$host};dbname={$dbname}";

$pdo = new PDO($dsn,$user,$pwd,array(PDO::MYSQL_ATTR_INIT_COMMAND => "set names utf8"));

$sql = "SELECT * FROM tb_user LIMIT 10";

try{
    //返回PDOStatement对象
    $values = $pdo->query($sql);
    foreach( $values as $value )
    {
        var_dump($value);
    }
}
catch(PDOException $e){
    die("发生错误:".$e->getMessage());
}
  • dsn指的是数据源,格式为mysql:host=localhost;dbname=rk_osc
  • PDO对象有4个参数,参数分别为dsn(数据源)、数据库用户名、数据库密码,第四个参数(数组)可选
  • array(PDO::MYSQL_ATTR_INIT_COMMAND => "set names utf8")设置编码为utf8,防止乱码
  • PDOException:代表一个由 PDO 产生的错误。在自己的代码不应抛出一个 PDOException 异常。

PDO常用函数

  • exec() 执行一条SQL语句,返回受影响的行数。用于增删改,对查询返回0
  • query() 执行一条SQL语句,返回PDOStatement对象,用于保存结果集
  • prepare() 执行一条SQL语句,返回PDOStatement对象
  • quote() 返回一个添加引号的字符串,用于SQL语句,可防止SQL注入
  • lastInsertId 返回最后插入的ID
  • setAttribute() 设置数据库连接属性
  • getAttribute() 获取数据库连接属性
  • errorCode() 获取跟数据库句柄上一次操作相关的SQLSTATE
  • errorInfo() 获取跟数据库句柄上一次操作相关的错误信息
  • beginTransaction() 开启一个事务。需要先关闭自动提交
  • commit() 提交事务
  • rollBack() 回滚事务
  • inTransaction() 检查操作是否在事务内

PDOStatement对象可操作的函数

  • execute() 执行一条预处理语句
  • rowCount() 返回上一个SQL语句影响的行数
  • fetch() 从结果集中获取一行
  • fetchAll() 返回一个包含结果中所有行的数组
  • setFetchMode() 设置默认获取结果集的模式
  • fetchObject() 获取结果集下一行并作为对象返回
  • fetchColumn() 获取结果集下一行的单独一列
  • bindParam() 绑定一个参数到指定的变量名
  • bindValue() 将某个值绑定到指定的参数
  • bindColumn() 绑定一列到PHP变量
  • getColumnMeta() 返回结果集中一列的元素据
  • columnCount() 返回结果中的列数
  • setAttribute() 设置一个语句属性
  • getAttribute() 获取一个语句属性
  • errorCode() 获取跟数据库句柄上一次操作相关的SQLSTATE
  • errorInfo() 获取跟数据库句柄上一次操作相关的错误信息
  • debugDumpparams() 打印一条SQL预处理语句
  • nextRowset() 在一个多行集语句句柄中推进到下一个行集

从结果中取出一行

$query = $db->prepare($sql);
$query->execute();
$result = $query->fetch(PDO::FETCH_ASSOC);

返回执行结果的行数

$q = $db->query(“SELECT …”);
$rows = $q->fetchAll();
$rowCount = count($rows);

此文部分内容参考了:

PDO学习笔记
PHP PDO

标签: PDO

发表评论: