[TOC]
>[success]PDO扩展为PHP访问数据库定义了一个轻量级的、一致性的接口,它 提供了一个数据访问抽象层,这样,无论使用什么数据库,都可以通 过一致的函数执行查询和获取数据。PDO随PHP5.1发行
PHP通过PDO扩展动态加载相应的数据库驱动程序来完成直接操作各 种数据库,所以在使用PDO时要明确告知所要使用的数据库驱动
## 查看是否支持
通过phpinfo()查看是否成功加载
>[danger]注意:如果没加载,可以去php.ini看是否开启该扩展,如果前面有分号去掉。
注意:如果没有该扩展,百度"php pdo扩展安装",有很多场景下的解决方案。
## pdo的使用
### 通过PDO连接MYSQL
~~~
$db = new PDO("dbtype:host=yourhost;dbname=yourdbname;charset=utf8","username","password");
~~~
通过PDO类产生一个连接对象
### 发送执行sql(针对select)
~~~
PDO::query ( string $statement )
~~~
通过查询,返回一个结果集对象
### 发关操作sql(针对UPDATE,DELETE,INSERT)
~~~
int PDO::exec ( string $statement )
~~~
执行一条 SQL 语句,并返回受影响的行数
### 取结果集中的数据
~~~
$result->fetchAll(PDO::FETCH_ASSOC)只得到关联方式的数据
$result->fetchAll(PDO::FETCH_NUM)得到索引表示记录
$result->fetchAll(PDO::FETCH_BOTH)得到关联与索引表示的数据
$result->fetchAll(PDO::FETCH_OBJ)得到以对象形式表示的数据
$result->fetch($type)从结果集中获取下一行
~~~
### 错误代码
~~~
mixed PDO::errorCode ( void )
~~~
获取跟数据库句柄上一次操作相关的 SQLSTATE
### 错误信息
~~~
public array PDO::errorInfo ( void )
~~~
获取跟数据库句柄上一次操作错误信息
### 自增id
~~~
string PDO::lastInsertId ([ string $name = NULL ] )
~~~
返回最后插入行的ID或序列值
**完整实例**
~~~
Excute query with secure data
==============================
<?php
try{
$db = new PDO("dbtype:host=yourhost;dbname=yourdbname;charset=utf8","username","password");
$mysecuredata=14;
$db->query("Select * from table where id=".$mysecuredata);
}catch(PDOException $e ){
echo "Error: ".$e;
}
?>
Excute query with insecure data
==============================
<?php
try{
$db = new PDO("dbtype:host=yourhost;dbname=yourdbname;charset=utf8","username","password");
$myinsecuredata=$_GET["id"];
$query=$db->prepare("Select * from table where id=?");
$query->excute(array($myinsecuredata));
}catch(PDOException $e ){
echo "Error: ".$e;
}
?>
~~~
## Pdo预准备
>[success]预计准备的目的与mysqli预准备的是一样的,可以减少解析次数和防注入
**实例**
~~~
<?php
/* 通过绑定的 PHP 变量执行一条预处理语句,*/
/*执行一条使用命名占位符的预处理语句 */
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour');
$sth->bindParam(':calories', $calories, PDO::PARAM_INT);
$sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12);
$sth->execute();
?>
<?php
/* 通过绑定的 PHP 变量执行一条预处理语句*/
/*执行一条使用问号占位符的预处理语句*/
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < ? AND colour = ?');
$sth->bindParam(1, $calories, PDO::PARAM_INT);
$sth->bindParam(2, $colour, PDO::PARAM_STR, 12);
$sth->execute();
?>
~~~
>[danger]练习:通过Pdo类,开发一个自己的操作数据库的类 Model.class.php
- 序言
- 第一章:准备工作
- 写在学习之前的话
- web应用开发结构
- 开发工具/环境
- 第二章:展现层面(HTML/CSS)
- HTML简介
- HTML基础
- HTML编码
- HTML链接
- HTML图像
- HTML列表
- HTML表单
- HTML表格(分水岭)
- HTML 实体
- HTML框架
- CSS层叠样式表
- CSS选择器
- CSS文本/字体
- CSS继承和叠加
- CSS框模型
- CSS浮动(分水岭)
- CSS定位
- CSS背景
- CSS图标字体
- CSS补充
- 开发技巧
- 第三章:展现层面(Javascript)
- JS简介
- JS实现
- JS输出交互
- JS变量
- JS数据类型
- JS运算符
- JS流程控制(分水岭)
- JS函数
- JS数组
- JS对象(分水岭)
- JS数组对象
- JS字符串对象
- JS数学对象
- JS日期对象
- JS BOM对象(分水岭)
- JS DOM对象
- JS事件对象
- JS元素对象
- JS DOM节点
- 第四章:展现层面(Jquery)
- JQ简介
- JQ使用
- JQ选择器
- JQ筛选
- JQ属性
- JQ-CSS
- JQ事件
- JQ文档处理
- JQ效果
- JQ-ajax
- 第五章:逻辑/业务层面(PHP)
- PHP简介
- PHP变量
- PHP数据类型
- PHP常量
- PHP运算符
- PHP流程控制
- PHP函数(分水岭)
- PHP日期
- PHP数学
- PHP数组
- PHP字符串
- PHP正则表达式(分水岭)
- PHP目录操作
- PHP文件
- PHP上传/下载
- PHP面向对象(分水岭)
- PHP图像处理
- PHP会话控制
- Ajax异步处理
- PHPMysql扩展
- PHPMysqli扩展
- PHPPdo扩展
- PHP接口
- PHP命名空间
- 第六章:逻辑/业务层面(框架设计)
- 第七章:存储层面(mysql)
- Mysql基础
- Mysql Sql简介
- Mysql数据库
- Mysql数据类型
- Mysql数据表
- Mysql操作记录
- Mysql查询
- Mysql修改表结构
- Mysql日期与时间
- Mysql分组统计
- Mysql多表查询
- Mysql安全
- Mysql存储引擎
- Mysql事务
- Mysql视图
- Mysql触发器
- Mysql存储过程
- Mysql存储函数
- Mysql优化
- 第八章:服务器(Linux)
- Linux介绍与安装
- Shell
- 目录与文件操作
- VIM编辑器使用
- 帐号管理
- SUDO
- 权限控制
- 压缩与打包
- 软件安装
- 计划任务
- 进程管理
- 宝塔Linux面板