隨著PHP的不斷升級,之前習慣的mysql_connect連接數據庫方法大有被新的PDO完全取代之勢,這里把常用方法都試了一遍, 做個整理, 方便大家以后使用
<?php /* 1, 主機地址:localhost表示本機 2,dbname:數據庫名稱 zhuangzi是我在本地創(chuàng)建的數據庫 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'"); /*執(zhí)行數據庫的插入, 當然student表是已經在數據庫中存在的了*/ $sql = "insert into student set names = '莊子', sex = '男', hobby = '乒乓球,籃球'"; $count = $db->exec($sql); //$db->query($sql); /* 需要有記錄結果返回時用exec方法, 否則用query方法 */ /*執(zhí)行數據庫的修改*/ $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:一下子獲取所有記錄,數字索引和關聯(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中的用法是一樣的,更加安全,更加快 */ //用名稱參入參數 $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中有三種方法執(zhí)行查詢操作,分別是用exec、query和使用prepared statement。三種方法各有利弊,先說exec。 (1)PDO::exec()一般用于執(zhí)行一次的SQL語句,返回受查詢影響的行數。它不適用于SELECT語句,如果需要用一次是SELECT語句,可以用PDO::query();也不適用于多次使用的語句,如果有多次使用的需求,考慮用PDO::prepare()。 (2)PDO::query()用于執(zhí)行一次SELECT語句,執(zhí)行后應當隨即使用PDOStatement::fetch()語句將結果取出,否則立即進行下一次的PDO::query()將會報錯。 (3)PDOStatement表示一個prepared statement語句,而在執(zhí)行之后,又將返回一組關聯(lián)數組的結果。如果一類查詢(查詢結構相似而具體的參數不一)需要一次解析而執(zhí)行使用很多次,可以先用prepared statement,這樣可以為具體的查詢的執(zhí)行做好準備,避免了分析、編譯、優(yōu)化的循環(huán),將減少資源占用率,從而提高運行效率。通過對數據庫進行prepare操作,便會返回PDOStatement數據類型,從而在其基礎上展開execute、fetch等進一步的操作。 PDO->exec() — 處理一條SQL語句,并返回所影響的條目數 PDO->lastInsertId() — 獲取寫入的最后一條數據的主鍵值 PDO->prepare() — 生成一個“查詢對象” PDO->query() — 處理一條SQL語句,并返回一個“PDOStatement” */ ?>