PHP pdo使用总结

pdo使用总结

  • PDO 简介
  • 初始化连接数据库和简单操作
  • PDO常用方法
  • 预处理

一、pdo简介

PDO是PHP访问数据库的一个轻量级、一致性的接口,实现PDO接口使php无论使用什么数据库,都可以通过一致的函数执行CRUD操作数据库。

二、初始化连接数据库和简单操作

try {
    //mysql:host=127.0.0.1;dbname=test 数据库类型mysql,主机地址127.0.0.1,数据库名称test
    //用户名root 密码''  设置字符编码为utf8
    $db = new PDO('mysql:host=127.0.0.1;dbname=test', 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => "set names utf8")); 
    //查询    
    $rows = $db->query('SELECT * from members')->fetchAll(PDO::FETCH_ASSOC);  
    $rs = array();  
    foreach($rows as $row) {    
        $rs[] = $row;   
    } 
    //结束连接对象   
    $db = null;    
} catch (PDOException $e) {    
    print "Error!: " . $e->getMessage() . "<br/>";    
    die();    
}  

查询后结果返回的类型:
PDO::FETCH_ASSOC – 关联数组形式
PDO::FETCH_NUM – 数字索引数组形式
PDO::FETCH_BOTH – 两者数组形式都有,这是缺省的
PDO::FETCH_OBJ – 按照对象的形式,类似于以前的 mysql_fetch_object()

三、PDO常用方法

PDO::query() 主要用于有记录结果返回的操作,特别是select操作。
PDO::exec()主要是针对没有结果集合返回的操作。如insert,update等操作。返回影响行数。
PDO::lastInsertId()返回上次插入操作最后一条ID
注意:如果用insert into tb(col1,col2)values(v1,v2),(v11,v22)..的方式一次插入多条记录,lastinsertid()返回的只是第一条(v1,v2)插入时的ID,而不是最后一条记录插入的记录ID。
PDOStatement::fetch()是用来获取一条记录。配合while来遍历。
PDOStatement::fetchAll()是获取所有记录集到一个中。
PDOStatement::fetchcolumn([intcolumn_indexnum])用于直接访问列,参数column_indexnum是该列在行中的从0开始索引值,但是,这个方法一次只能取得同一行的一列,只要执行一次,就跳到下一行。因此,用于直接访问某一列时较好用,但要遍历多列就用不上。
PDOStatement::rowcount()适用于当用query("select...")方法时,获取记录的条数。也可以用于预处理中。$stmt->rowcount();
PDOStatement::columncount()适用于当用query("select...")方法时,获取记录的列数。

四、预处理

pdo的预处理有什么好处呢,为什么不直接用exec和query方法。举个栗子:

delete from table where id = $_GET['id'];

exec和query是直接把整句sql语句进行编译运行,假如用户输入

delete from table where id = 1 or 1=1;

这样就会有sql注入的危险,而使用pdo的execute预处理就不会出现这个问题
使用占位符处理:

  1. ? 按顺序使用
  2. :name 按名称使用,与顺序无关

    $sql = delete from table where id = ?;//id=:id
    $stmt = $pdo->prepare($sql);
    $stmt->execute(array(1));//array(':id'=>1)
    $stmt->rowCount();//返回影响行数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值