1.简单介绍一下什么是PDO
PDO扩展为PHP访问数据库定义了一个轻量级的、一致性的接口,它提供了一个数据访问抽象层,这样,无论使用什么数据库,都可以通过一致的函数执行查询和获取数据。PDO随PHP5.1发行,在PHP5.0的PECL扩展中也可以使用,无法运行于之前的PHP版本。
2.PDO链接数据库 (这里介绍两种方式)
、
1.
try{
//连接数据的第一种方式
$dsn = 'mysql:host=localhost;dbname=test;charset=utf8';
//host 主机名 dbname 数据库名 charset 字符集
$pdo = new PDO($dsn, '用户', '密码');
} catch(PDOException $e) {
die('数据库连接失败:'. $e->getMessage());
}
2.第二种链接方式
try{
$pdo = new PDO('uri:file:///绝对路径的文件', '用户名', '密码');
} catch(PDOException $e) {
die('数据库连接失败:'. $e->getMessage());
}
3.对增删改处理的函数 exec();
try{
$dsn = 'mysql:host=localhost;dbname=test;charset=utf8';
$pdo = new PDO($dsn, 'root', '123456');
//可以手动的给pdo对象设置属性,来管理他的warning,和异常
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
} catch(PDOException $e) {
die('数据库连接失败:'. $e->getMessage());
}
try{
//增删改
$result = $pdo->exec('delete from star1 where id = 3');
}catch (PDOException $e) {
echo $e->getCode() . '<br />';
echo $e->getMessage();
}
//当设置pdo属性为warning的时候,可以打印如下信息
//错误的号
echo $pdo->errorCode();
//错误的详细信息
var_dump($pdo->errorInfo());
4.query 对查询处理的函数
try {
$result = $pdo->query('select * from star');
//这个地方需要注意一下,query出来的是对象,只有通过foreach遍历之后才能把数据拿出来
foreach ($result as $key => $value) {
var_dump($value);
}
} catch (PDOException $e) {
echo $e->getMessage();
}
5.PDO支持事务
try {
//开启事务
//innodb:支持事务 myisam:不支持事务
$pdo->beginTransaction();
$sql = "update star set money=money-10000 where id = 2";
$result = $pdo->exec($sql);
if ($result > 0) {
echo '转出成功';
} else {
echo '装出失败';
throw new Exception("转出失败", 1);
}
$sql = "update star1 set money=money+10000 where id = 6";
$result = $pdo->exec($sql);
if ($result > 0) {
echo '装入成功';
} else {
echo '装入失败';
throw new Exception("装入失败", 1);
}
//必须提交事务
$pdo->commit();
} catch (PDOException $e) {
//回到最初的状态
$pdo->rollBack();
echo $e->getMessage();
}
6.PDO 预处理 (两种占位符)? :name
try{
//预处理 用到的方法是prepare
$stmt = $pdo->prepare("insert into class (cname,prive) values(?,?)");
//方法一: 把一个值绑定到一个参数
$stmt->bindValue(1,'小明');
$stmt->bindValue(2,'1000000');
$stmt->execute();
//方法二;定义一个变量来接收这个值,然后把这个值给绑定上
$name = '小红';
$prive = '200000';
$yu->bindValue(1,$name);
$yu->bindValue(2,$prive);
$yu->execute();
}catch(PDOException $e){
echo $e->getMessage();
}
//方法三
$yu = $pdo->prepare("insert into class (cname,prive) values (?,?)");
$yu->execute(['迷宫','1898089080']);
PDO 类:
PDO::beginTransaction — 启动一个事务
PDO::commit — 提交一个事务
PDO::__construct — 创建一个表示数据库连接的 PDO 实例
PDO::errorCode — 获取跟数据库句柄上一次操作相关的 SQLSTATE
PDO::errorInfo — 返回最后一次操作数据库的错误信息
PDO::exec — 执行一条 SQL 语句,并返回受影响的行数
PDO::getAttribute — 取回一个数据库连接的属性
PDO::getAvailableDrivers — 返回一个可用驱动的数组
PDO::inTransaction — 检查是否在一个事务内
PDO::lastInsertId — 返回最后插入行的ID或序列值
PDO::prepare — 备要执行的SQL语句并返回一个 PDOStatement 对象
PDO::query — 执行 SQL 语句,返回PDOStatement对象,可以理解为结果集
PDO::quote — 为SQL语句中的字符串添加引号。
PDO::rollBack — 回滚一个事务
PDO::setAttribute — 设置属性
PDOStatement 类:
PDOStatement::bindColumn — 绑定一列到一个 PHP 变量
PDOStatement::bindParam — 绑定一个参数到指定的变量名
PDOStatement::bindValue — 把一个值绑定到一个参数
PDOStatement::closeCursor — 关闭游标,使语句能再次被执行。
PDOStatement::columnCount — 返回结果集中的列数
PDOStatement::debugDumpParams — 打印一条 SQL 预处理命令
PDOStatement::errorCode — 获取跟上一次语句句柄操作相关的 SQLSTATE
PDOStatement::errorInfo — 获取跟上一次语句句柄操作相关的扩展错误信息
PDOStatement::execute — 执行一条预处理语句
PDOStatement::fetch — 从结果集中获取下一行
PDOStatement::fetchAll — 返回一个包含结果集中所有行的数组
PDOStatement::fetchColumn — 从结果集中的下一行返回单独的一列。
PDOStatement::fetchObject — 获取下一行并作为一个对象返回。
PDOStatement::getAttribute — 检索一个语句属性
PDOStatement::getColumnMeta — 返回结果集中一列的元数据
PDOStatement::nextRowset — 在一个多行集语句句柄中推进到下一个行集
PDOStatement::rowCount — 返回受上一个 SQL 语句影响的行数
PDOStatement::setAttribute — 设置一个语句属性
PDOStatement::setFetchMode — 为语句设置默认的获取模式。