PHP中PDO的常用方法

时间:2016-07-21 22:55:30 类型:PHP
字号:    
随着PHP的不断升级,之前习惯的mysql_connect连接数据库方法大有被新的PDO完全取代之势,这里把常用方法都试了一遍, 做个整理, 方便大家以后使用
<?php 
  /*
  1, 主机地址:localhost表示本机
  2,dbname:数据库名称 zhuangzi是我在本地创建的数据库
  3, $db = new PDO($dsn, 'root', 'root');  两个root分别是连接数据库的用户名和密码,
     $db为
  据库名称*/
  $dsn = "mysql:host=localhost;dbname=zhuangzi";//构造数据源
  try{
  	  $db = new PDO($dsn, 'root', 'root');//初始化一连接到数据库 zhuangzi 的PDO对象
  }
  catch(Exception $e){
	    echo "数据库连接错误";
		exit();
  }
  $db->exec("SET names 'utf8'");
  /*执行数据库的插入, 当然student表是已经在数据库中存在的了*/
  $sql = "insert into student set
                      names = '庄子',
					  sex   = '男',
					  hobby = '乒乓球,篮球'";
  $count = $db->exec($sql); 
  //$db->query($sql);
  /*
    需要有记录结果返回时用exec方法, 否则用query方法
  */
  
  /*执行数据库的修改*/
  $sql = "update student set
                      names = '庄子国',
					  sex   = '男',
					  hobby = '足球'
					  where id=19";
  $count = $db->exec($sql); 
  //$db->query($sql);
  
  /*查询数据数据库的表*/
  $sql = "select * from student";
  $result = $db->query($sql);
 /* 
  一行一行的读取数据
  方法1:
  */
  while($row = $result->fetch()){
		echo "ID:".$row["id"]."姓名:".$row["names"]."<br/>";
  }
  
  
 /* 
  方法2:一下子获取所有记录,数字索引和关联索引都有,浪费资源
  */
  $result_all = $result->fetchAll();
  foreach($result_all as $row){
	  		echo "ID:".$row["id"]."姓名:".$row["names"]."<br/>";
	  }
  /* 
  方法3:一下子获取所有记录,只关联名称索引
  */
   $result->setFetchMode(PDO::FETCH_ASSOC); //只关联名称索引
   $result_arr = $result->fetchAll();
   foreach($result_arr as $row){
	  		echo "ID:".$row["id"]."姓名:".$row["names"]."<br/>";
	  }
	/*
       预编译的使用,感觉这个与java中的用法是一样的,更加安全,更加快	
	*/
	
	//用名称参入参数
	$sql = 'insert into student (names,sex,hobby) VALUES (:names, :sex,:hobby)';
    $result = $db->prepare($sql);  //返回一个PDOStament 对象
    //绑定数据 PDOStament对象的bindParam()来绑定参数:占位符,实际数据
   
    $result->bindParam(':names',$names);
    $result->bindParam(':sex',$sex);
    $result->bindParam(':hobby',$hobby);
	
	//用位置参入参数
	$sql = "insert into student(names,sex,hobby) VALUES (?,?,?)";
	$result = $db->prepare($sql);
	$result->bindParam(1, $names);
	$result->bindParam(2, $sex);
	$result->bindParam(3, $hobby);
	$names= '孔子';
    $sex= '男';
    $hobby= '围棋,周游';
    $result->execute();
  /*
PDO中的查询操作:exec/query/prepared statement
在PDO中有三种方法执行查询操作,分别是用exec、query和使用prepared statement。三种方法各有利弊,先说exec。
(1)PDO::exec()一般用于执行一次的SQL语句,返回受查询影响的行数。它不适用于SELECT语句,如果需要用一次是SELECT语句,可以用PDO::query();也不适用于多次使用的语句,如果有多次使用的需求,考虑用PDO::prepare()。
(2)PDO::query()用于执行一次SELECT语句,执行后应当随即使用PDOStatement::fetch()语句将结果取出,否则立即进行下一次的PDO::query()将会报错。
(3)PDOStatement表示一个prepared statement语句,而在执行之后,又将返回一组关联数组的结果。如果一类查询(查询结构相似而具体的参数不一)需要一次解析而执行使用很多次,可以先用prepared statement,这样可以为具体的查询的执行做好准备,避免了分析、编译、优化的循环,将减少资源占用率,从而提高运行效率。通过对数据库进行prepare操作,便会返回PDOStatement数据类型,从而在其基础上展开execute、fetch等进一步的操作。

PDO->exec() — 处理一条SQL语句,并返回所影响的条目数
PDO->lastInsertId() — 获取写入的最后一条数据的主键值
PDO->prepare() — 生成一个“查询对象”
PDO->query() — 处理一条SQL语句,并返回一个“PDOStatement”
  */

?>