作用:数据库操作
属性:
方法:
连接数据库
function __construct("mysql:host=localhost;dbname=psd1409","用户名","密码");
第一个参数:"mysql:host=localhost;dbname=psd1409";
mysql---数据库的类型
host----ip地址
dbname--数据库名称
第二个参数:用户名
第三个参数:密码
执行sql语句
使用:
extension_dir = "F:\php5.4\ext" 是否正确
extension=php_pdo.dll 开启 5.2 5.3
extension=php_pdo_mysql.dll 开启
实例化对象
$pdo=new PDO("mysql:host=localhost;dbname=psd1409","root","root");
操作数据库表:
执行sql语句
object query($sql); //专门用来执行查询语言
PDOStatement对象:释放了数据库表的查询结果
PDOStatement->fetch()
特点:
每次获取一个记录,指针下移,当最后一条获取完成后,再次执行,返回false
循环:
$arr=array();
while($row=PDOStatement->fetch()){
$arr[]=$row;
}
作用:获取所有的记录,返回的二维数组
$paoS->fetchAll()
作用:执行fetch() fetchAll() 的返回值类型
$pdoS->setFetchMode(值)
值:
PDO::FETCH_ASSOC
PDO::FETCH_BOTH
PDO::FETCH_NUM
PDO::FETCH_OBJ
PDO::FETCH_ASSOC
从结果集中获取以列名为索引的关联数组。
PDO::FETCH_NUM
从结果集中获取一个以列在行中的数值偏移量为索引的值数组。
PDO::FETCH_BOTH
这是默认值,包含上面两种数组。
PDO::FETCH_OBJ
从结果集当前行的记录中获取其属性对应各个列名的一个对象。
PDO::FETCH_BOUND
使用fetch()返回TRUE,并将获取的列值赋给在bindParm()方法中指定的相应变量。
PDO::FETCH_LAZY
创建关联数组和索引数组,以及包含列属性的一个对象,从而可以在这三种接口中任选一种。
fetch_style:控制结果集中数据的显示方式。
fetchAll()方法获取结果集中的所有行数据记录。
PDO常用方法:
PDO::query() 主要用于有记录结果返回的操作,特别是select操作。
PDO::exec() 主要是针对没有结果集合返回的操作。如insert,update等操作。返回影响行数。
PDO::lastInsertId() 返回上次插入操作最后一条ID,但要注意:如果用insert into tb(col1,col2) values(v1,v2),(v11,v22)..的方式
PDOStatement::fetch() 是用来获取一条记录。配合while来遍历。
PDOStatement::fetchAll() 是获取所有记录集到一个中。
PDOStatement::fetchcolumn([int column_indexnum]) 用于直接访问列,参数column_indexnum是该列在行中的从0开始索引列时较好用,但要遍历多列就用不上。
PDOStatement::rowcount()适用于当用query("select ...")方法时,获取记录的条数。也可以用于预处理中。
$stmt->rowcount(PDOStatement::columncount()适用于当用query("select ...")方法时,获取记录的列数。
pdo -> fetchColumn() 执行 SQL 查询语句, 返回首行指定列的值, 默认返回首行首列
prepare()方法负责准备要执行的查询。
execute()方法负责执行准备好的查询。
bindParam() 和 bindVale() 区别:
唯一的区别就是前者使用一个PHP变量绑定参数,而后者使用一个值。
所以使用bindParam是第二个参数只能用变量名,而不能用变量值,而bindValue至可以使用具体值。
int exec($sql)
说明:update insert delele
设置交互字符集:
$pdo->exec("set names utf8");
主键id值
$pdo->lastInsertId();
pdo使用:
1、直接使用pdo操作数据库表
文章添加
文章列表
2、数据模型类中,使用pdo yii tp *****
改造 Model.class.php
prepare()
execute()
文章详细页:sql语句是否可以被注入???
select title,content,pubTime from cms_news where id=215
union select 1,2,3 from cms_admin limit 1,1
select * from cms_admin where username='wang' or 1=1 # and password='123456'
解决:
1、对url地址传值,强制类型转换 (int)
2、用正则表达式,对传值,进行过滤或判断
preg_match("select|insert|update|delete|union|load");
3、PDO 类的 预处理 功能。
PDOStatement $pdo->prepare("select title,content,pubTime from cms_news where id=:id")//解析语法
占位符的语法格式:
?
:占位符名称
占位符绑定数据:
PDOStatement->bindParam("占位符的名称",值,值的类型)
说明:
第二个参数,必须是一个变量。
?绑定数据,第一个参数,应该为位置,从1开始,递增
第三个参数,使用如下类常量,
PDO::PARAM_INT 绑定值的类型为数值
PDO::PARAM_STR 绑定值的类型为字符串
作用:执行
PDOStatement->execute() //运行准备要执行的sql语句
PDO->prepare("select * from cms_news where id=?); //准备执行,参数是一个sql语句,在sql语句中可以使用占位符,$id=5;
PDOStatement->bindParam(1,$id,PDO::PARAM_INT); //绑定数据
bool PDOStatement->execute(); //获取查询到的记录
array PDOStatement->fetchAll()
四大语句的什么位置可以使用占位符:
所有值的地方可以使用占位符。
select 字段列表 from 表名 where id=占位符 and title like '%占位符%'
group by 字段 having 字段=占位符 order by 字段 asc|desc limit 占位符,占位符
update 表名 set 字段=占位符,..... where 字段名=占位符
insert into 表名(字段,....) values(占位符,.....)
delete from 表名 where 字段=占位符
文件上传类:(支持多文件上传)
多文件上传,$_FILES数组格式。
类:
方法
文件上传
构造方法
大小指定
类型指定
路径指定