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