PHP pdo使用总结

来源:互联网 发布:linux vi编辑器例题 编辑:程序博客网 时间:2024/04/28 12:34

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