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 相关文章推荐
snoopy PHP版的网络客户端提供本地下载
Apr 15 PHP
php 将excel导入mysql
Nov 09 PHP
PHP中变量引用与变量销毁机制分析
Nov 15 PHP
Laravel 5 学习笔记
Mar 06 PHP
php使用Image Magick将PDF文件转换为JPG文件的方法
Apr 01 PHP
php使用CURL不依赖COOKIEJAR获取COOKIE的方法
Jun 17 PHP
php封装好的人民币数值转中文大写类
Dec 20 PHP
PHP中phar包的使用教程
Jun 14 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
Nov 10 PHP
PHP正则验证字符串是否为数字的两种方法并附常用正则
Feb 27 PHP
PHP超低内存遍历目录文件和读取超大文件的方法
May 01 PHP
laravel5.6中的外键约束示例
Oct 23 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文件打包 下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件
2012/06/13 PHP
curl实现站外采集的方法和技巧
2014/01/31 PHP
ThinkPHP控制器间实现相互调用的方法
2014/10/31 PHP
关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析
2016/01/08 PHP
PHP简单实现正则匹配省市区的方法
2018/04/13 PHP
JavaScript 函数replace深入了解
2013/03/14 Javascript
简单的两种Extjs formpanel加载数据的方式
2013/11/09 Javascript
原生js的弹出层且其内的窗口居中
2014/05/14 Javascript
js使用html()或text()方法获取设置p标签的显示的值
2014/08/01 Javascript
jQuery焦点图切换简易插件制作过程全纪录
2014/08/27 Javascript
jquery中关于bind()方法的使用技巧分享
2017/03/30 jQuery
详解使用vue实现tab 切换操作
2017/07/03 Javascript
JavaScript 中Date对象的格式化代码方法汇总
2017/09/06 Javascript
bootstrap treeview 扩展addNode方法动态添加子节点的方法
2017/11/21 Javascript
基于three.js编写的一个项目类示例代码
2018/01/05 Javascript
JavaScript实现构造json数组的方法分析
2018/08/17 Javascript
js实现点击选项置顶动画效果
2020/08/25 Javascript
vue界面发送表情的实现代码
2020/09/11 Javascript
vue实现lodop打印功能的示例
2020/11/11 Javascript
python文件写入实例分析
2015/04/08 Python
python定向爬虫校园论坛帖子信息
2018/07/23 Python
python将txt文件读入为np.array的方法
2018/10/30 Python
python使用suds调用webservice接口的方法
2019/01/03 Python
python 发送和接收ActiveMQ消息的实例
2019/01/30 Python
python用requests实现http请求代码实例
2019/10/31 Python
Python中格式化字符串的四种实现
2020/05/26 Python
Python如何操作docker redis过程解析
2020/08/10 Python
Python如何爬取b站热门视频并导入Excel
2020/08/10 Python
纯CSS3实现移动端展开和收起效果的示例代码
2020/04/26 HTML / CSS
Canvas 帧动画吃苹果小游戏
2020/08/05 HTML / CSS
Steve Madden官网:美国鞋类品牌
2017/01/29 全球购物
日本最大的药妆连锁店:Matsukiyo松本清药妆店
2017/11/23 全球购物
先进集体事迹材料范文
2014/12/25 职场文书
十八大观后感
2015/06/12 职场文书
关于JavaScript轮播图的实现
2021/11/20 Javascript
cypress测试本地web应用
2022/06/01 Javascript