<?php $pdo = new PDO("mysql:host=localhost;dbname=db_demo","root","");$rs = $pdo -> query("select * from test");while($row = $rs ->fetch()){print_r($row);

}?>

PDO类学习笔记

http://redlink.blog.163.com/blog/static/11523550720116192045165/

PDO中包含三个预定义的类,它们分别是 PDO、PDOStatement、PDOException PDO:

PDO->setAttribute();

全局属性设置,包括:列名格式和错误提示类型 PDO->query($sql);

常用于执行有返回的sql查找语句,但执行之前要手动转义,返回PDOStatement对象

PDO->exec($sql);

执行没有返回的sql语句,同样要手动转义,有插入、修改、删除操作。返回影响的行数

PDO->lastInsertId();

返回最后一次执行插入的主键值,如果一条语句多次插入则返回第一个主键值:id+rows-1

PDO->beginTransaction();

事务的开启,中间加入多条关联的可执行sql语句,进行块化处理,也叫(回滚起点)

PDO->commit();

事务结束,即回滚结束 PDO->rollback();

事务的回滚处理,即回滚到原起点 PDO->quto($sql);

将$sql语句手动转义,进而进入下一次的处理 PDO->prepare($sql);

生成一个新的编译模板,用于以后的多次重复执行,返回一个PDOStatement对象

PDO->__construct();

建立一个PDO数据库连接对象实例 PDO->errorCode(); 捕获PDO错误代码 PDO->errorInfo();

捕获PDO错误信息,返回信息数组 PDO->getAttribute();

获取一个数据库连接对象的属性信息 PDO->getAvailableDriver();

获取有效PDO连接的驱动名称

PDOStatement对象由PDO->query()和PDO->prepare()返回: PDOStatement->fetch();

以指定格式每次返回一条记录,通常和while配合遍历出内容 PDOStatement->fetchAll();

以指定格式一次性返回所有内容

PDOStatement->fetchColumn(int num);

返回指定字段索引的一个值,每次返回指定字段的一行,即一个内容值。配合while遍历

PDOStatement->fetchObject();

以面向对象的风格每次返回一条记录,配合while遍历 PDOStatement->bindColumn();

将查找记录集中的列与变量相绑定,进而用变量获取相应列的行内容,用$smt->fetch(::BOUBD)进行遍历 PDOStatement->bindParam();

以引用方式绑定一个变量到占位符,从而完成编译!因为是引用所以可以重复多次

PDOStatement->bindValue(); 同上,但只能绑定一次

PDOStatement->closeCursor();

关闭当前的模板编译链接,为下次创建好的模板链接做好准备。(即模板只能有一个链接)

PDOStatement->excute();

执行编译模板,有两种格式。1.先编译后执行,2.边编译边执行 PDOStatement->columnCount();

返回PDOStatement结果集列的总数 PDOStatement->rowCount();

返回PDOStatement结果集行的总数  PDOStatement->nextRowset();

常配合fetch()和fetchAll()判断下一条记录是否存在,以便继续遍历出下一条记录 PDOStatement->errorCode(); 返回错误代码

PDOStatement->errorInfo(); 返回错误信息

PDOStatement->getAttribute();

PDOStatement->getColumnMeta();

PDOStatement->setAttribute();

PDOStatement->setFetchMode();

各参数及属性介绍:

1.       全局属性,设置列名为一定的格式,指定一种错误提示

***PDO::ATTR_CASE: (强制列名变成一种格式)

PDO::CASE_LOWER: 强制列名是小写.

PDO::CASE_NATURAL: 列名按照原始的方式 PDO::CASE_UPPER: 强制列名为大写. ***PDO::ATTR_ERRMODE: (错误提示. )

PDO::ERRMODE_SILENT: 不显示错误信息,只显示错误码.(默认) PDO::ERRMODE_WARNING: 显示警告错误.

PDO::ERRMODE_EXCEPTION: 抛出异常.

$dbh->setAttribute(PDO::ERR_MODE,PDO::ERRMODE_SILENT);默认 $dbh->setAttribute(PDO::ERR_MODE,PDO::ERRMODE_EXCEPTION); $dbh->setAttribute(PDO::ERR_MODE,PDO::ERRMODE_WARNING); $dbh->setAttribute(PDO::ATTR_ORACLE_NULLS,PDO::CASE_LOWER); $dbh->setAttribute(PDO::ATTR_ORACLE_NULLS,PDO::CASE_NATURAL); $dbh->setAttribute(PDO::ATTR_ORACLE_NULLS,PDO::CASE_UPPER);

2.       对编译参数的绑定,即对绑定到占位符的参数进行必要的限制如类型,长度等

PDO_PARAM_BOOL 布尔类型。 PDO_PARAM_INT 整型。

PDO_PARAM_STR   char,varchar和其它字符串类型。

PDO_PARAM_input_output 参数传给存储过程时使用此类型,可以在过程执行后修改。 PDO_PARAM_NULL NULL类型。 PDO_PARAM_LOG   大对象类型。

PDO_PARAM_STMT   PDO对象类型,当前不可操作。

$sth->bindParam(':calories', $calories, PDO::PARAM_INT); $sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12); $sth->bindValue(':colour', $colour, PDO::PARAM_STR);

3.       对返回值进行相应格式的设定,->fetch(),->fetchAll() PDO::FETCH_BOTH-- 两者数组形式都有,**这是缺省的** $result = $sth->fetch(PDO::FETCH_BOTH); PDO::FETCH_ASSOC-- 关联数组形式

$result = $sth->fetch(PDO::FETCH_ASSOC); PDO::FETCH_NUM-- 数字索引数组形式

$result = $stmt->fetch(PDO::FETCH_NUM); PDO::FETCH_OBJ -- 按照对象的形式,同fetchObject() $result = $sth->fetch(PDO::FETCH_OBJ);

$result = $sth->fetch(PDO::FETCH_LAZY);

其实PDO最难的一点是对各种参数的理解,而且这方面的中文资料很少,所以正在更新中„

以上返回的结构都是一定的数组和对象的结构。通常用遍历和while的方式进行取值

以下围绕数据库连接及相应的操作:插入、查找、修改、删除进行讲解。 下面两个连接数据库的实例化过程是等价的!

$dsn = 'mysql:host=localhost;dbname=world;'; //数据源名称,为特定的数据库加载相应的驱动 $user = 'root'; $password = 'root'; try{

$dbh = new PDO($dsn, $user, $password[,driverOptions]);//数据库对象的实例化

$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);//设置全局属性 }catch (PDOException $e){

echo 'Error: ' . $e->getMessage();//错误异常,抛出提示 }

try{

$pdo = new PDO($dsn, $user,

$password,array(PDO::ATTR_PERSISTENT=>TRUE,PDO::ATTR_CASE=>PDO::CASE_UPPER,PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));// 可以用$row['city']来访问列值,而不必要用$row['CITY']大写方式来访问 }catch (PDOException $e){

echo 'Error: ' . $e->getMessage();//错误异常,抛出提示 }

PDO中包含三个预定义的类,它们分别是 PDO、PDOStatement、PDOException。

持久连接的缓存可以使你避免在脚本每次需要与数据库对话时都要部署一个新的连接的资源消耗,让你的Web应用更加快速。

array(PDO::ATTR_PERSISTENT => true)就是把连接类型设置为持久连接。

先分四类讨论:

1.PDO->query() 主要用于有记录结果返回的操作,特别是查找操作。返回PDOSatement对象

PDO->exec()主要是针对没有结果集合返回的操作。如:设置、修改、删除、插入等操作。返回影响行数。

2.PDO->lastInsertId()返回上次插入操作最后一条ID,但要注意:如果用insert into

tb(col1,col2) values(v1,v2),(v11,v22)..的方式一次插入多条记录,lastinsertid()返回的只是第一条(v1,v2)插入时的ID,而不是最后一条记录插入的记录ID。要使得所有的方式都得到统一:$id= PDO->lastInsertId()+rows-1;

PDOStatement::fetch()每一次获取一条记录(即一行)。配合while来遍历。 PDOStatement::fetchAll()是获取所有记录集到一个变量中。

PDOStatement::fetchcolumn([int index]) 好比单列的fetch()访问。用于直接访问列,参数index是该列在行中的从0开始索引值,但是,这个方法一次只能取得同一行的一列,只要执行一次,就跳到下一行。就好比每次只访问一个内容

PDOStatement::rowcount()适用于当用query("select ...")方法时,获取记录的条数。也可以用于预处理中。$stmt->rowcount();

PDOStatement::columncount()适用于当用query("select ...")方法时,获取记录的列数。 记录集较小时fetchAll效率高,减少从数据库检索次数,但对于大结果集,用fetchAll则给系统带来很大负担。

2、fetch()或fetchall()的几个参数详解:

mixed pdostatement::fetch([int fetch_style [,int cursor_orientation [,int cursor_offset]]])

array pdostatement::fetchAll(int fetch_style) fetch_style参数:

$row=$rs->fetchAll(PDO::FETCH_BOTH); FETCH_BOTH是默认的,可省,返回关联和索引。

$row=$rs->fetchAll(PDO::FETCH_ASSOC); FETCH_ASSOC参数决定返回的只有关联数组。 $row=$rs->fetchAll(PDO::FETCH_NUM); 返回索引数组

$row=$rs->fetchAll(PDO::FETCH_OBJ); 如果fetch()则返回对象,如果是fetchall(),返回由对象组成的二维数组 foreach($row as $r){

echo "{$r->cityid}:城市 {$r->city}.
";} $row=$rs->fetchAll(PDO::FETCH_ LAZY);

$row=$rs->fetch(PDO::FETCH_LAZY); FETCH_LAZY返回对象如:

PDORow Object( [queryString] => select * from city//这个在特定的时候很有用     [cityid] => 2     [city] => 福州     [countryid] => 1)

$row = $stmt->fetch(PDO::FETCH_BOUND);用于使fetch返回true,并将获取的列值赋给 ???bindParam()方法中指定的相应变量。

3.的预处理:(查找、插入、修改、删除等批量数据)

意义:批量进行重复性操作,可实现模块化处理(可以自动转义)

mysql支持两种参数占位方式:问号参数“?”和命名参数“:字段名”;命名参数更明确。 $q="insert into city(city,countryid) values(?,?)";

//或$q = "insert into city(city,countryid) values(:city,:countryid)";  执行execute后:$pdo->lastinsertid();对预处理也是可用的。

有两种方式:注意两种方式用“?”问号参数绑定时有不同的execute占位引用方式。并且偏移基数不同。

(1)显式地把参数值做为参数传给execute: boolean PDOSTatement::execute([array input_parameters])      命名参数方式:

$q = "insert into city(city,countryid) values(:city,:countryid)";         $stmt = $pdo->prepare($q);

$stmt->execute(array(':city'=>'hubei',':countryid'=>'2')); //本条可多次执行。注意,countryid是数值型,但也要用单引号来包住。      问号参数:

$q = "insert into city(city,countryid) values(?,?)";       $stmt = $pdo->prepare($q);

$stmt->execute(array('0'=>'hubei','1'=>'2'));

//注意这里不是用'?'的方式,而是用上面占位符的从0开始的索引偏移,

(2)绑定参数。boolean PDOSTatement::bindParam(mixed parameter,mixed &variable [,int datatype [,int length [,mixed driver_option]]])

mixed parameter 是占位符,当用?问号参数时,parameter是占位符的从1开始的索引偏移,而不是‘?’. 预处理的绑定列:

boolean PDOStatement::bindcolum(mixed column_index,mixed &param [,int type [,int maxlen[,mixed driver_options]]]);

参数column_index是要绑定的行中列偏移,从1开始。当然也可以用列名。type就用来设置类型限制变量值,如PDO::PARAM_STR是限制文本,具体参bindParam()。通过maxlen限制其长度。

$calories = 150; $colour = 'red';

$sth = $dbh->prepare('SELECT name, colour, calories FROM fruit

WHERE calories

$sth->bindParam(':calories', $calories, PDO::PARAM_INT);//限制为int类型 $sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12);//限制长度为12的字串 $sth->execute();   $calories = 150; $colour = 'red';

$sth = $dbh->prepare('SELECT name, colour, calories FROM fruit

WHERE calories

$sth->execute(array(':calories' => $calories, ':colour' => $colour));//直接以数组的形式

$calories = 150; $colour = 'red';

$sth = $dbh->prepare('SELECT name, colour, calories FROM fruit        WHERE calories

$sth->execute(array($calories, $colour));

$calories = 150; $colour = 'red';

$sth = $dbh->prepare('SELECT name, colour, calories FROM fruit

WHERE calories bindParam(1, $calories, PDO::PARAM_INT); $sth->bindParam(2, $colour, PDO::PARAM_STR, 12); $sth->execute();

4.用PDO处理事务:(关联数据的关联处理,包括prepare())

意义:对要求相关联的数据同时操作的内容作事务处理,要么同时失败要么同时成功(最适合处理关联数据)

PDO->__construct()方法的作用是建立一个PDO链接数据库的实例。

PDO->beginTransaction(),PDO->commit(),PDO->rollBack()这三个方法是在支持回滚功能时一起使用的。PDO->beginTransaction()方法标明起始点,PDO->commit()方法标明回滚结束点,并执行SQL,PDO->rollBack()执行回滚。

try {

$dbh = new PDO ('mysql:host=localhost;dbname=test', 'root', '');        $dbh->exec(“set names ‘utf-8’”);

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);        $dbh->beginTransaction();

$dbh->exec("INSERT INTO `test`.`table` (`name` ,`age`)VALUES ('mick', 22);");        $dbh->exec("INSERT INTO `test`.`table` (`name` ,`age`)VALUES ('lily', 29);");        $dbh->exec("INSERT INTO `test`.`table` (`name` ,`age`)VALUES ('susan', 21);");        $dbh->commit();

} catch (Exception $e) {       $dbh->rollBack();

echo "Failed: " . $e->getMessage();   }

5.需手动转义的情况

PDO->quto();

PDO->query();

PDO->exec();

事务处理等就先手动转义

php5.5 pdo mysql_PHP5中使用PDO连接数据库的方法相关推荐

  1. php5.5 pdo mysql_PHP5中PDO的简单使用

    PDO(PHP Data Object) 是PHP 5新出来的东西,在PHP 6都要出来的时候,PHP 6只默认使用PDO来处理数据库,将把所有的数据库扩展移到了PECL,那么默认就是没有了我们喜爱的 ...

  2. pdo mysql dsn_使用PDO构造函数连接数据库及DSN详解

    PDO是PHP 5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接和处理,什么 php_mysql.dll.php_pgsql.dll.php_m ...

  3. php怎样使用pdo,PHP中使用PDO_PHP教程

    PDO简介 PDO 是一个"数据库访问抽象层",作用是统一各种数据库(MySQL.MSSQL.Oracle.DB2.PostgreSQL--)的访问接口,能轻松的在不同的数据库之间 ...

  4. php中的PDO对象---对PDO对象的认识、什么是PDO对象

    注:本报告总结完全由本人编著,部分概念内容由网络摘录 1 对PDO对象的认识 1.1 简介 PHP 数据对象 (PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口.实现 PDO 接口的每个数据 ...

  5. php pdo设置事物级别,PHP中使用PDO操作事务的一些小测试

    PHP中使用PDO操作事务的一些小测试 关于事务的问题,我们就不多解释了,以后在学习 MySQL 的相关内容时再深入的了解.今天我们主要是对 PDO 中操作事务的一些小测试,或许能发现一些比较好玩的内 ...

  6. mysql pdo 安全_使用PDO查询Mysql来避免SQL注入风险

    当 我们使用传统的 mysql_connect .mysql_query方法来连接查询数据库时,如果过滤不严,就有SQL注入风险,导致网站被攻击,失 去控制.虽然可以用mysql_real_escap ...

  7. php pdo性能,深入分析PHP PDO配置及使用方法

    PDO(PHP数据对象) 是一个轻量级的.具有兼容接口的PHP数据连接拓展,是一个PHP官方的PECL库,随PHP 5.1发布,需要PHP 5的面向对象支持,因而在更早的版本上无法使用,下面我们一起来 ...

  8. php pdo 预处理删除,PHP PDO扩展整理,包括环境配置\基本增删改查\事务\预处理

    介绍 PDO是一种PHP程序连接数据库的接口,通过PDO可以将PHP程序与数据库联系起来. 优点: 1.可移植性,可以支持各种主流数据库服务,而且实现代码几乎都是相同的,使用PDO在代码层面上不需要太 ...

  9. php.ini 没有pdo,php.ini 没有pdo怎么办

    php.ini没有pdo的解决办法:首先找到并打开"php.ini"文件:然后添加配置内容为"extension=php_pdo.dll extension=php_pd ...

  10. php pdo的用法,php pdo函数库用法详解

    pdo->begintransaction() - 标明回滚起始点 pdo->commit() - 标明回滚结束点,并执行sql pdo->__construct() - 建立一个p ...

最新文章

  1. ASP.NET中使用MD5和SHA1算法加密
  2. 近看图灵碗 (8. 我就是上帝) (上)
  3. 微信小程序 textarea 简易解决方案
  4. 12.figure/subplot多窗口技巧
  5. 【电子信息复试】考研复试常考问题——数据库
  6. 如何查找,修复和避免C#.NET中内存泄漏的8个最佳实践
  7. Wexflow:C#中的开源工作流引擎
  8. html5表白页面3d,七夕节表白3d相册制作(html5+css3)
  9. php开发大型网站如何优化,PHP编写大型网站问题
  10. 2019年中国软杯-基于深度学习的银行卡号识别系统
  11. Apollo详解之canbus模块——综述
  12. Latex中PDF文档目录乱码解决方案
  13. 北京科技大学计算机考研考试科目,2020考研北京科技大学计算机考研考试科目...
  14. 【C语言】一文带你简单了解C语言
  15. akka 与kafka
  16. 用成员函数和友元函数重载运算符
  17. 分享一副现实版抽象画
  18. 欧盟委员会希望将电子支付标准化
  19. svn和git不过是工具而已
  20. 【《自动控制原理(田玉平)》|课本知识点整理】

热门文章

  1. Composite模式
  2. 13.docker exec
  3. 4. HTTP Status Code
  4. 9. JavaScript 事件参考手册
  5. LoadRunner测试Google Suggest
  6. Bootstrap框架常用总结
  7. 系列文章--WF学习资料汇总
  8. Windows Azure 安全最佳实践 - 第 7 部分:提示、工具和编码最佳实践
  9. winsock错误一览表
  10. 使用Java 自身Timer API实现定时器的方法