亚洲色蝴蝶中文娱乐网,在线亚洲欧美一区二区中文字幕,无人视频在线观看视频高清视频,99午夜国产精品一区二区,人人妻人人爽人人狠狠

PHP中PDO的常用方法

時(shí)間:2016-07-21 22:55:30 類(lèi)型:PHP
字號(hào):    
隨著PHP的不斷升級(jí),之前習(xí)慣的mysql_connect連接數(shù)據(jù)庫(kù)方法大有被新的PDO完全取代之勢(shì),這里把常用方法都試了一遍, 做個(gè)整理, 方便大家以后使用
<?php 
  /*
  1, 主機(jī)地址:localhost表示本機(jī)
  2,dbname:數(shù)據(jù)庫(kù)名稱(chēng) zhuangzi是我在本地創(chuàng)建的數(shù)據(jù)庫(kù)
  3, $db = new PDO($dsn, 'root', 'root');  兩個(gè)root分別是連接數(shù)據(jù)庫(kù)的用戶(hù)名和密碼,
     $db為
  據(jù)庫(kù)名稱(chēng)*/
  $dsn = "mysql:host=localhost;dbname=zhuangzi";//構(gòu)造數(shù)據(jù)源
  try{
  	  $db = new PDO($dsn, 'root', 'root');//初始化一連接到數(shù)據(jù)庫(kù) zhuangzi 的PDO對(duì)象
  }
  catch(Exception $e){
	    echo "數(shù)據(jù)庫(kù)連接錯(cuò)誤";
		exit();
  }
  $db->exec("SET names 'utf8'");
  /*執(zhí)行數(shù)據(jù)庫(kù)的插入, 當(dāng)然student表是已經(jīng)在數(shù)據(jù)庫(kù)中存在的了*/
  $sql = "insert into student set
                      names = '莊子',
					  sex   = '男',
					  hobby = '乒乓球,籃球'";
  $count = $db->exec($sql); 
  //$db->query($sql);
  /*
    需要有記錄結(jié)果返回時(shí)用exec方法, 否則用query方法
  */
  
  /*執(zhí)行數(shù)據(jù)庫(kù)的修改*/
  $sql = "update student set
                      names = '莊子國(guó)',
					  sex   = '男',
					  hobby = '足球'
					  where id=19";
  $count = $db->exec($sql); 
  //$db->query($sql);
  
  /*查詢(xún)數(shù)據(jù)數(shù)據(jù)庫(kù)的表*/
  $sql = "select * from student";
  $result = $db->query($sql);
 /* 
  一行一行的讀取數(shù)據(jù)
  方法1:
  */
  while($row = $result->fetch()){
		echo "ID:".$row["id"]."姓名:".$row["names"]."<br/>";
  }
  
  
 /* 
  方法2:一下子獲取所有記錄,數(shù)字索引和關(guān)聯(lián)索引都有,浪費(fèi)資源
  */
  $result_all = $result->fetchAll();
  foreach($result_all as $row){
	  		echo "ID:".$row["id"]."姓名:".$row["names"]."<br/>";
	  }
  /* 
  方法3:一下子獲取所有記錄,只關(guān)聯(lián)名稱(chēng)索引
  */
   $result->setFetchMode(PDO::FETCH_ASSOC); //只關(guān)聯(lián)名稱(chēng)索引
   $result_arr = $result->fetchAll();
   foreach($result_arr as $row){
	  		echo "ID:".$row["id"]."姓名:".$row["names"]."<br/>";
	  }
	/*
       預(yù)編譯的使用,感覺(jué)這個(gè)與java中的用法是一樣的,更加安全,更加快	
	*/
	
	//用名稱(chēng)參入?yún)?shù)
	$sql = 'insert into student (names,sex,hobby) VALUES (:names, :sex,:hobby)';
    $result = $db->prepare($sql);  //返回一個(gè)PDOStament 對(duì)象
    //綁定數(shù)據(jù) PDOStament對(duì)象的bindParam()來(lái)綁定參數(shù):占位符,實(shí)際數(shù)據(jù)
   
    $result->bindParam(':names',$names);
    $result->bindParam(':sex',$sex);
    $result->bindParam(':hobby',$hobby);
	
	//用位置參入?yún)?shù)
	$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中的查詢(xún)操作:exec/query/prepared statement
在PDO中有三種方法執(zhí)行查詢(xún)操作,分別是用exec、query和使用prepared statement。三種方法各有利弊,先說(shuō)exec。
(1)PDO::exec()一般用于執(zhí)行一次的SQL語(yǔ)句,返回受查詢(xún)影響的行數(shù)。它不適用于SELECT語(yǔ)句,如果需要用一次是SELECT語(yǔ)句,可以用PDO::query();也不適用于多次使用的語(yǔ)句,如果有多次使用的需求,考慮用PDO::prepare()。
(2)PDO::query()用于執(zhí)行一次SELECT語(yǔ)句,執(zhí)行后應(yīng)當(dāng)隨即使用PDOStatement::fetch()語(yǔ)句將結(jié)果取出,否則立即進(jìn)行下一次的PDO::query()將會(huì)報(bào)錯(cuò)。
(3)PDOStatement表示一個(gè)prepared statement語(yǔ)句,而在執(zhí)行之后,又將返回一組關(guān)聯(lián)數(shù)組的結(jié)果。如果一類(lèi)查詢(xún)(查詢(xún)結(jié)構(gòu)相似而具體的參數(shù)不一)需要一次解析而執(zhí)行使用很多次,可以先用prepared statement,這樣可以為具體的查詢(xún)的執(zhí)行做好準(zhǔn)備,避免了分析、編譯、優(yōu)化的循環(huán),將減少資源占用率,從而提高運(yùn)行效率。通過(guò)對(duì)數(shù)據(jù)庫(kù)進(jìn)行prepare操作,便會(huì)返回PDOStatement數(shù)據(jù)類(lèi)型,從而在其基礎(chǔ)上展開(kāi)execute、fetch等進(jìn)一步的操作。

PDO->exec() — 處理一條SQL語(yǔ)句,并返回所影響的條目數(shù)
PDO->lastInsertId() — 獲取寫(xiě)入的最后一條數(shù)據(jù)的主鍵值
PDO->prepare() — 生成一個(gè)“查詢(xún)對(duì)象”
PDO->query() — 處理一條SQL語(yǔ)句,并返回一個(gè)“PDOStatement”
  */

?>