PHP的PDO

Posted 奋进程序猿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP的PDO相关的知识,希望对你有一定的参考价值。

PDO中包含三个预定一类:PDO、PODStatement和PDOException。

1.PDO类

PDO类代表一个php和数据库之间的连接,PDO类所拥有的方法如下:

PDO:构造器,构建一个新的PDO对象。

beginTransaction:事务开始。

commit:提交事务

errorCode:从数据库返回一个错误代号。

errorInfo:从数据库返回一个含有错误信息的数据。

exec:执行一条sql语句并还回影响的行数

getAttribute:返回一个数据库连接属性。

lastInsertId:返回最新插入到数据库的行id

prepare:为执行准备一条sql语句,返回语句执行后的联合结果集(PDOStatement)。

query:执行一条sql语句并返回结果集

quote:返回添加引号的字符串,使其可以用于sql中

rollBack:事务回滚

setAttribute:设置一个数据库连接属性

2.PDOStatement类

PDOStatement类代表一条预处理语句以及语句执行后的联合结果集合,拥有的方法:

bindColumn:绑定一个PHP变量到结果集中的输出序列。

bindParam:绑定一个PHP变量到一个预处理语句中的参数

bindValue:绑定一个值到预处理语句中的参数

closeCursor:关闭游标,是语句可以再次执行。

columnCount:返回结果集中的列的数量

errorCode:从语句中返回一个错误的代号

errorInfo:从语句中返回一个包含错误信息的数组

execute:执行一条预处理语句

fetch:从结果集中去除一行

fetchAll:从结果集中取出一个包含所有行的数组

fetchColumn:返回结果集中某一列中的数据。

getAttribute:返回一个PDOStatement属性

getColumnMeta:返回结果集中某一列的结构。

nextRowset:返回下一个结果集

rowCount:返回sql语句执行后影响的行数

setAttribute:设置一个PDOStatement属性

setFetchModel:为PDOStatement设定获取数据的方式。

3.PDOException

PDOException是对exception的简单从写。

使用PDO 案例1:

<?php
try{
    $dsn=mysql:host=localhost;dbname=shen;//设置PDO的数据源
    $db=new PDO($dsn,root,rootroot);//构造方法  
    //设置异常
    $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    $db->exec("set names utf8");
    $sql = "insert into a2(name) values(‘asdf‘)";
    $db->exec($sql);//执行语句
    //使用预处理
    $insert = $db->prepare(insert into a2(name) values(?));
    $insert->execute(array());
    $insert->execute(array(lisi));
//查询结果 $sql
=select name from a2; $query = $db->prepare($sql); $query->execute(); var_dump($query->fetchAll(PDO::FETCH_ASSOC)); }catch(PDOException $err){ echo $err->getMessage(); } ?>

案例2:绑定参数和预编译

<?php
try{
   $dsn=mysql:host=localhost;dbname=shen;//设置PDO的数据源
   $dbh=new PDO($dsn,root,rootroot);//构造方法 
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
   $name = ;
   $sth = $dbh->prepare(select name from a2 where name = :name);
   $sth->bindparam(:name,$name);
  $sth->execute();
   var_dump($sth->fetchAll(PDO::FETCH_ASSOC));
   $sth = $dbh->prepare(select * from a2 where name = ?);
   $sth->bindparam(1,$name,PDO::PARAM_STR);
   $sth->execute();
   var_dump($sth->fetchAll(PDO::FETCH_ASSOC));
   
}catch(PDOException $err){
    echo $err->getMessage();
}
?>

在mysql的应用中,为了防止注入共计,通常使用intval,addslashes等函数对值进行转义,转变成sql中合法的类型,这种方法比较复杂,而使用PDO的bindParam方法就变得比较简单,只需要在函数中指定第三个参数,就可以把值转换为需要的类型并拼接到原先的语句中。

案例3:事务处理

事务一般分为三步

1.开始事务

2.执行事务中需要执行的sql语句

3.提交事务 完成事务。

 

<?php
try{
   $dsn=mysql:host=localhost;dbname=shen;//设置PDO的数据源
   $db=new PDO($dsn,root,rootroot);//构造方法 
   $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
   $db->beginTransaction();//开始事务
   //开始执行sql语句
   $db->commit();//提交事务 结束
   
}catch(PDOException $err){
    echo $err->getMessage();
}
?>

 



以上是关于PHP的PDO的主要内容,如果未能解决你的问题,请参考以下文章

在 PDO 的 JS 代码中使用 PHP 数组

php课程---php使用PDO方法详解(转)

php [php:PDO transaction]示例代码。 #PHP

你能用 PDO 查询帮助我理解这个 PHP 代码吗? [关闭]

如何使用 PDO 从 php 文件中插入数据?

PHP PDO获取结果集