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导出Excel的小经验 完美解决乱码问题
Jun 10 PHP
php二维数组用键名分组相加实例函数
Nov 06 PHP
thinkphp实现上一篇与下一篇的方法
Dec 08 PHP
php中switch与ifelse的效率区别及适用情况分析
Feb 12 PHP
PHP中使用Memache作为进程锁的操作类分享
Mar 30 PHP
php实现在多维数组中查找特定value的方法
Jul 29 PHP
实例简介PHP的一些高级面向对象编程的特性
Nov 27 PHP
php rmdir使用递归函数删除非空目录实例详解
Oct 20 PHP
laravel 5.3中自定义加密服务的方案详解
May 09 PHP
CodeIgniter框架数据库基本操作示例
May 24 PHP
PHP封装的mysqli数据库操作类示例
Feb 16 PHP
PHP生成二维码与识别二维码的方法详解【附源码下载】
Mar 07 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
虹吸式咖啡壶操作
2021/03/03 冲泡冲煮
CI框架AR数据库操作常用函数总结
2016/11/21 PHP
悄悄用脚本检查你访问过哪些网站的代码
2010/12/04 Javascript
仿jQuery的siblings效果的js代码
2011/08/09 Javascript
node.js中的querystring.unescape方法使用说明
2014/12/10 Javascript
Node.js事件循环(Event Loop)和线程池详解
2015/01/28 Javascript
JS实现很实用的对联广告代码(可自适应高度)
2015/09/18 Javascript
JavaScript获取服务器端时间的方法
2016/11/29 Javascript
Vue 全家桶实现移动端酷狗音乐功能
2018/11/16 Javascript
JS桶排序的简单理解与实现方法示例
2019/11/25 Javascript
JavaScript中的类型检查
2020/02/03 Javascript
JavaScript原型继承和原型链原理详解
2020/02/04 Javascript
[01:01:41]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma BO3 第二场 1月31日
2021/03/11 DOTA
跟老齐学Python之大话题小函数(2)
2014/10/10 Python
python实现自动更换ip的方法
2015/05/05 Python
对Python3 goto 语句的使用方法详解
2019/02/16 Python
使用Jupyter notebooks上传文件夹或大量数据到服务器
2020/04/14 Python
浅谈Python中文件夹和python package包的区别
2020/06/01 Python
Python日志打印里logging.getLogger源码分析详解
2021/01/17 Python
聊聊Python pandas 中loc函数的使用,及跟iloc的区别说明
2021/03/03 Python
canvas学习和滤镜实现代码
2018/08/22 HTML / CSS
猫途鹰:全球领先的旅游点评社区
2017/04/07 全球购物
丝芙兰香港官网:Sephora香港
2018/03/13 全球购物
经管应届生求职信
2013/11/17 职场文书
物流管理专业职业生涯规划书
2014/01/06 职场文书
追悼会主持词
2014/03/20 职场文书
就业推荐表自我鉴定
2014/03/21 职场文书
医院院务公开实施方案
2014/05/03 职场文书
自强自立美德少年事迹材料
2014/08/16 职场文书
开展党的群众路线教育实践活动个人对照检查材料
2014/11/05 职场文书
故意伤害罪辩护词
2015/05/21 职场文书
学籍证明模板
2015/06/18 职场文书
学校标语口号大全
2015/12/26 职场文书
2016党员学习《反对自由主义》心得体会
2016/01/22 职场文书
SQLServer2008提示评估期已过解决方案
2021/04/12 SQL Server
Win11开始菜单添加休眠选项
2022/04/19 数码科技