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