php中mysql连接方式PDO使用详解


Posted in PHP onFebruary 25, 2015

PDO常用方法:

PDO::query()主要用于有记录结果返回的操作(PDOStatement),特别是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([int column_indexnum])用于直接访问列,参数column_indexnum是该列在行中的从0开始索引值,但是,这个方法一次只能取得同一行的一列,只要执行一次,就跳到下一行。因此,用于直接访问某一列时较好用,但要遍历多列就用不上。
PDOStatement::rowcount()适用于当用query("select ...")方法时,获取记录的条数。也可以用于预处理中。$stmt->rowcount();
PDOStatement::columncount()适用于当用query("select ...")方法时,获取记录的列数。

注解:
1、选fetch还是fetchall?
小记录集时,用fetchall效率高,减少从数据库检索次数,但对于大结果集,用fetchall则给系统带来很大负担。数据库要向WEB前端传输量太大反而效率低。
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(),返回由对象组成的二维数组

<?php

$dbh = new PDO('mysql:host=localhost;dbname=access_control', 'root', '');  

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

$dbh->exec('set names utf8'); 

/*添加*/

//$sql = "INSERT INTO `user` SET `login`=:login AND `password`=:password"; 

$sql = "INSERT INTO `user` (`login` ,`password`)VALUES (:login, :password)";  $stmt = $dbh->prepare($sql);  $stmt->execute(array(':login'=>'kevin2',':password'=>''));  

echo $dbh->lastinsertid();  

/*修改*/

$sql = "UPDATE `user` SET `password`=:password WHERE `user_id`=:userId";  

$stmt = $dbh->prepare($sql);  

$stmt->execute(array(':userId'=>'7', ':password'=>'4607e782c4d86fd5364d7e4508bb10d9'));  

echo $stmt->rowCount(); 

/*删除*/

$sql = "DELETE FROM `user` WHERE `login` LIKE 'kevin_'"; //kevin%  

$stmt = $dbh->prepare($sql);  

$stmt->execute();  

echo $stmt->rowCount();  

/*查询*/

$login = 'kevin%';  

$sql = "SELECT * FROM `user` WHERE `login` LIKE :login";  

$stmt = $dbh->prepare($sql);  

$stmt->execute(array(':login'=>$login));  

while($row = $stmt->fetch(PDO::FETCH_ASSOC)){     

 print_r($row);  

}  

print_r( $stmt->fetchAll(PDO::FETCH_ASSOC)); 

?>

1 建立连接

 <?php

 $dbh=newPDO('mysql:host=localhost;port=3306; dbname=test',$user,$pass,array(

 PDO::ATTR_PERSISTENT=>true

 ));

 ?>

持久性链接PDO::ATTR_PERSISTENT=>true

2. 捕捉错误

 <?php

 try{

 $dbh=newPDO('mysql:host=localhost;dbname=test',$user,$pass);

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

 $dbh->exec("SET CHARACTER SET utf8");

 $dbh=null; //断开连接

 }catch(PDOException$e){

 print"Error!:".$e->getMessage()."<br/>";

 die();

 }

 ?>

3. 事务的

<?php

try{

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

$dbh->beginTransaction();//开启事务

$dbh->exec("insertintostaff(id,first,last)values(23,'Joe','Bloggs')");

$dbh->exec("insertintosalarychange(id,amount,changedate)

values(23,50000,NOW())");

$dbh->commit();//提交事务

}catch(Exception$e){

$dbh->rollBack();//错误回滚

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

}

?>

4. 错误处理

a. 静默模式(默认模式)

$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_SILENT); //不显示错误

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);//显示警告错误,并继续执行

$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);//产生致命错误,PDOException
 <?php

 try{    

  $dbh = new PDO($dsn, $user, $password);    

  $sql = 'Select * from city where CountryCode =:country';    

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

  $stmt = $dbh->prepare($sql);    

  $stmt->bindParam(':country', $country, PDO::PARAM_STR);    

  $stmt->execute();    

  while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {      

   print $row['Name'] . "/t";    

  }  

 }   // if there is a problem we can handle it here  

 catch (PDOException $e)  {    

  echo 'PDO Exception Caught.  ';    

  echo 'Error with the database: <br />';    

  echo 'SQL Query: ', $sql;   

  echo 'Error: ' . $e->getMessage();  

 } 

 ?>

1. 使用 query()

<?php

$dbh->query($sql); 当$sql 中变量可以用$dbh->quote($params); //转义字符串的数据

$sql = 'Select * from city where CountryCode ='.$dbh->quote($country);  

foreach ($dbh->query($sql) as $row)   {    

 print $row['Name'] . "/t";    

 print $row['CountryCode'] . "/t";    

 print $row['Population'] . "/n"; 

} 

?>

2. 使用 prepare, bindParam和 execute [建议用,同时可以用添加、修改、删除]

<?php

$dbh->prepare($sql); 产生了个PDOStatement对象
PDOStatement->bindParam()
PDOStatement->execute();//可以在这里放绑定的相应变量

?>

3. 事物

<?php 

 try {  

  $dbh = new PDO('mysql:host=localhost;dbname=test', 'root', '');  

  $dbh->query('set names utf8;');  

  $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();  

 }  

?>

以上就是关于PHP中pdo的相关用法的全部内容了,希望本文能对大家有所帮助,也希望大家能够喜欢。

PHP 相关文章推荐
PHP实现域名whois查询的代码(数据源万网、新网)
Feb 22 PHP
PHP5与MySQL数据库操作常用代码 收集
Mar 21 PHP
一个基于PDO的数据库操作类
Mar 24 PHP
php的一个简单加密解密代码
Jan 14 PHP
php跨域cookie共享使用方法
Feb 20 PHP
php查找指定目录下指定大小文件的方法
Nov 28 PHP
关于Laravel Route重定向的一个注意点
Jan 16 PHP
PHP Socket网络操作类定义与用法示例
Aug 30 PHP
PHP命名空间namespace及use的简单用法分析
Aug 03 PHP
PHPStudy下如何为Apache安装SSL证书的方法步骤
Jan 23 PHP
PHP+redis实现微博的推模型案例分析
Jul 10 PHP
Thinkphp5.0框架视图view的循环标签用法示例
Oct 12 PHP
php中数据库连接方式pdo和mysqli对比分析
Feb 25 #PHP
Mac OS下配置PHP+MySql环境
Feb 25 #PHP
php禁止某ip或ip地址段访问的方法
Feb 25 #PHP
php+ajax实时刷新简单实例
Feb 25 #PHP
用php来限制每个ip每天浏览页面数量的实现思路
Feb 24 #PHP
php基于GD库画五星红旗的方法
Feb 24 #PHP
php获取文件名后缀常用方法小结
Feb 24 #PHP
You might like
php array_intersect()函数使用代码
2009/01/14 PHP
php学习笔记之 函数声明(二)
2011/06/09 PHP
iis下php mail函数的sendmail配置方法(官方推荐)
2012/04/25 PHP
Windows下的PHP 5.3.x安装 Zend Guard Loader教程
2014/09/06 PHP
php 调用ffmpeg获取视频信息的简单实现
2017/04/03 PHP
兼容IE和FF的js脚本代码小结(比较常用)
2010/12/06 Javascript
Package.js  现代化的JavaScript项目make工具
2012/05/23 Javascript
bootstrap模态框实现拖拽效果
2016/12/14 Javascript
JS库中的Particles.js在vue上的运用案例分析
2017/09/13 Javascript
JavaScript中重名的函数与对象示例详析
2017/09/28 Javascript
Angular中使用MathJax遇到的一些问题
2017/12/15 Javascript
element-ui 关于获取select 的label值方法
2018/08/24 Javascript
react在安卓中输入框被手机键盘遮挡问题的解决方法
2018/09/03 Javascript
JavaScript数据结构与算法之二叉树实现查找最小值、最大值、给定值算法示例
2019/03/01 Javascript
微信小程序实现人脸识别登陆的示例代码
2019/04/02 Javascript
简单了解JavaScript弹窗实现代码
2020/05/07 Javascript
python 判断自定义对象类型
2009/03/21 Python
pandas的唯一值、值计数以及成员资格的示例
2018/07/25 Python
PyQt5下拉式复选框QComboCheckBox的实例
2019/06/25 Python
pyqt5 使用cv2 显示图片,摄像头的实例
2019/06/27 Python
详解Python中的各种转义符\n\r\t
2019/07/10 Python
python实现按首字母分类查找功能
2019/10/31 Python
在python中利用dict转json按输入顺序输出内容方式
2020/02/27 Python
HTML5 拖拽批量上传文件的示例代码
2018/03/28 HTML / CSS
经济实惠的豪华背包和行李袋:Packs Project
2018/10/17 全球购物
人事助理岗位职责
2013/11/18 职场文书
上班上网检讨书
2014/01/29 职场文书
策划创业计划书
2014/02/06 职场文书
开朗女孩的自我评价
2014/02/10 职场文书
大学生2014全国两会学习心得体会
2014/03/10 职场文书
合伙协议书范本
2014/04/21 职场文书
观看信仰心得体会
2014/09/04 职场文书
2015年乡镇党务公开工作总结
2015/05/19 职场文书
终止解除劳动合同证明书
2015/06/17 职场文书
2019同学聚会主持词
2019/05/06 职场文书
Python包argparse模块常用方法
2021/06/04 Python