隨著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” */ ?>