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访问查询mysql数据的三种方法
Oct 09 PHP
搜索和替换文件或目录的一个好类--很实用
Oct 09 PHP
加速XP搜索功能堪比vista
Mar 22 PHP
测试您的 PHP 水平的题目
May 30 PHP
php中json_decode()和json_encode()的使用方法
Jun 04 PHP
浅谈PHP与C#的值类型指向区别的详解
May 21 PHP
PIGCMS 如何关闭聊天机器人
Feb 12 PHP
PHP文件上传操作实例详解
Sep 27 PHP
PHP实现双链表删除与插入节点的方法示例
Nov 11 PHP
Laravel 实现关系模型取出需要的字段
Oct 10 PHP
Yii使用DbTarget实现日志功能的示例代码
Jul 21 PHP
PHP高并发和大流量解决方案整理
Mar 09 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生成唯一的订单函数分享
2015/02/02 PHP
php格式化金额函数分享
2015/02/02 PHP
php实现无限级分类(递归方法)
2015/08/06 PHP
laravel实现前后台路由分离的方法
2019/10/13 PHP
Js callBack 返回前一页的js方法
2008/11/30 Javascript
jQuery布局插件UI Layout简介及使用方法
2013/04/03 Javascript
jQuery中:enabled选择器用法实例
2015/01/04 Javascript
BootStrap学习系列之Bootstrap Typeahead 组件实现百度下拉效果(续)
2016/07/07 Javascript
js实现可旋转的立方体模型
2016/10/16 Javascript
js querySelector() 使用方法
2016/12/21 Javascript
开源免费天气预报接口API及全国所有地区代码(国家气象局提供)
2016/12/26 Javascript
js实现选项卡内容切换以及折叠和展开效果【推荐】
2017/01/08 Javascript
Angular1.x自定义指令实例详解
2017/03/01 Javascript
Vue2.0实现1.0的搜索过滤器功能实例代码
2017/03/20 Javascript
json的结构与遍历方法实例分析
2017/04/25 Javascript
vue父组件向子组件(props)传递数据的方法
2018/01/02 Javascript
js最简单的双向绑定实例讲解
2018/01/02 Javascript
在vue中v-bind使用三目运算符绑定class的实例
2018/09/29 Javascript
解决IOS端微信H5页面软键盘弹起后页面下方留白的问题
2019/06/05 Javascript
jquery实现垂直手风琴菜单
2020/03/04 jQuery
NodeJS多种创建WebSocket监听的方式(三种)
2020/06/04 NodeJs
Python wxPython库Core组件BoxSizer用法示例
2018/09/03 Python
Python读取系统文件夹内所有文件并统计数量的方法
2018/10/23 Python
python re库的正则表达式入门学习教程
2019/03/08 Python
Django如何简单快速实现PUT、DELETE方法
2019/07/24 Python
python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法
2019/08/27 Python
pycharm如何使用anaconda中的各种包(操作步骤)
2020/07/31 Python
简单掌握CSS3将文字描边及填充文字颜色的方法
2016/03/07 HTML / CSS
Kaufmann Mercantile官网:家居装饰、配件、户外及更多
2018/09/28 全球购物
波兰在线香水店:Perfumy.pl
2019/08/12 全球购物
元旦寄语大全
2014/04/10 职场文书
县委常委班子专题民主生活会查摆问题及整改措施
2014/09/27 职场文书
党员个人整改方案及措施
2014/10/25 职场文书
2016年班主任培训心得体会
2016/01/07 职场文书
pytorch实现ResNet结构的实例代码
2021/05/17 Python
Python matplotlib多个子图绘制整合
2022/04/13 Python