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 相关文章推荐
Smarty+QUICKFORM小小演示
Feb 25 PHP
php数组(array)输出的三种形式详解
Jun 05 PHP
解析htaccess伪静态的规则
Jun 18 PHP
php截取中文字符串不乱码的方法
Dec 25 PHP
PHP小技巧之函数重载
Jun 02 PHP
修改ThinkPHP缓存为Memcache的方法
Jun 25 PHP
PHP中使用sleep函数实现定时任务实例分享
Aug 21 PHP
JSON两种结构之对象和数组的理解
Jul 19 PHP
Zend Framework框架实现类似Google搜索分页效果
Nov 25 PHP
php微信公众号开发之秒杀
Oct 20 PHP
PHP实现15位身份证号转18位的方法分析
Oct 16 PHP
laravel 解决Eloquent ORM的save方法无法插入数据的问题
Oct 21 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
UCenter中的一个可逆加密函数authcode函数代码
2010/07/20 PHP
php XMLWriter类的简单示例代码(RSS输出)
2011/09/30 PHP
浅谈PHP5.6 与 PHP7.0 区别
2019/10/09 PHP
Dom在ajax技术中的作用说明
2010/10/25 Javascript
初识JQuery 实例一(first)
2011/03/16 Javascript
读jQuery之四(优雅的迭代)
2011/06/20 Javascript
兼容ie、firefox的图片自动缩放的css跟js代码分享
2013/08/12 Javascript
网页收藏夹显示ICO图标(代码少)
2015/08/04 Javascript
微信小程序 教程之WXSS
2016/10/18 Javascript
利用HBuilder打包前端开发webapp为apk的方法
2017/11/13 Javascript
在Vue项目中引入腾讯验证码服务的教程
2018/04/03 Javascript
node.js连接mysql与基本用法示例
2019/01/05 Javascript
vue3.0生命周期的示例代码
2020/09/24 Javascript
[51:27]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
Python 调用VC++的动态链接库(DLL)
2008/09/06 Python
ssh批量登录并执行命令的python实现代码
2012/05/25 Python
Python编程pygal绘图实例之XY线
2017/12/09 Python
Python实现的径向基(RBF)神经网络示例
2018/02/06 Python
Python 实现取矩阵的部分列,保存为一个新的矩阵方法
2018/11/14 Python
python实现邮件发送功能
2019/08/10 Python
python判断无向图环是否存在的示例
2019/11/22 Python
python实现监控阿里云账户余额功能
2019/12/16 Python
python psutil监控进程实例
2019/12/17 Python
python实现控制台输出彩色字体
2020/04/05 Python
Lampegiganten丹麦:欧洲领先的照明网上商店
2018/04/25 全球购物
销售业务实习自我鉴定
2013/09/23 职场文书
成人高等教育毕业生自我鉴定
2013/10/22 职场文书
优秀教师事迹简介
2014/02/02 职场文书
手术室护士长竞聘书
2014/03/31 职场文书
关于读书的演讲稿
2014/05/07 职场文书
2014年客服工作总结范文
2014/11/13 职场文书
房地产财务经理岗位职责
2015/04/08 职场文书
学雷锋广播稿大全
2015/08/19 职场文书
Python实战之实现简易的学生选课系统
2021/05/25 Python
如何使用 resize 实现图片切换预览功能
2021/08/23 HTML / CSS
SQL Server2019安装的详细步骤实战记录(亲测可用)
2022/06/10 SQL Server