一、簡介
PDO擴展為PHP訪問數(shù)據(jù)庫定義了一套輕量級的接口蛔翅,PHP通過調(diào)用接口,可以很方便的實現(xiàn)數(shù)據(jù)的增刪改查位谋。
二山析、數(shù)據(jù)庫連接
1. 連接mysql
$host = '127.0.0.1';
$port = '8080';
$db_name = 'test';
$charset = 'utf8';
$db_user = 'root';
$db_passwd = '123456';
$dsn = "mysql:host = $host; port = $port; dbname = $db_name; charset = $charset";
try {
$db = new PDO($dsn, $db_user, $db_passwd);
} catch (PDOException $e) {
echo "Error:" . $e->getMessage();
die();
}
數(shù)據(jù)庫連接成功后,會返回一個PDO類的實例對象掏父。此處的數(shù)據(jù)庫連接不是長連接笋轨,當(dāng)腳本執(zhí)行結(jié)束后,便會斷開數(shù)據(jù)庫連接赊淑;如果想使用數(shù)據(jù)庫的長連接服務(wù)爵政,則需要設(shè)置PDO的ATTR_PERSISTENT屬性。
2. 長連接
try {
$db = new PDO($dsn, $db_user, $db_passwd, array(PDO::ATTR_PERSISTENT => true));
} catch (PDOException $e) {
echo "Error:" . $e->getMessage();
die();
}
三陶缺、常用的PDO類方法
1. PDO::query()
函數(shù)功能:query()方法主要用來執(zhí)行SELECT語句完成查詢操作并钾挟,返回結(jié)果集
函數(shù)原型:PDOStatement PDO::query ( string $sql )
參數(shù)說明:
(1) sql:原生的sql語句
返回值:如果成功,返回PDOStatement類對象饱岸,可以理解為結(jié)果集掺出;否則,返回FALSE
2.PDO::exec()
函數(shù)功能:exec()方法主要用來執(zhí)行DELETE和UPDATE語句苫费,并返回受影響的行數(shù)
函數(shù)原型:int PDO::exec(string $sql)
參數(shù)說明:
(1) sql:原生的sql語句
返回值:返回受影響的行數(shù)
3.PDO::prepare()
函數(shù)功能:準(zhǔn)備執(zhí)行指定的sql語句汤锨,返回結(jié)果集;prepare()方法經(jīng)常用來實現(xiàn)參數(shù)綁定
函數(shù)原型:PDOStatement PDO::prepare(string $sql)
參數(shù)說明:
(1) sql:原生的sql語句
返回值:如果成功百框,返回PDO::Startement類對象闲礼;否則,返回FALSE
4.PDO::lastInsertId()
函數(shù)功能:獲取最后插入的記錄的自增id
函數(shù)原型:string PDO::lastInsertId()
返回值:如果成功,返回最后插入的記錄的自增id
四柬泽、常用的PDOStatement類方法
1.PDOStatement::bindParam()
函數(shù)功能:bindParam()方法常用來實現(xiàn)單個參數(shù)的綁定慎菲,負責(zé)將變量綁定到指定的參數(shù)
函數(shù)原型:bool PDOStatement::bindParam(mixed $param, mixed &$var [, $data_type])
參數(shù)說明:
(1) param:參數(shù)名,如果采用“:name”形式的占位符聂抢,則param為“:name”形式的參數(shù)名钧嘶,如果采用“?”形式的占位符琳疏,則param為以1開始的索引
(2) var:需要綁定的變量
(3) data_type:參數(shù)的類型有决,使用PDO::PARAM_*常量來指定參數(shù)類型,默認為PDO::PARAM_STR
返回值:成功空盼,返回TRUE书幕;失敗,返回FALSE
2.PDOStatement::bindValue()
函數(shù)功能:bindValue()方法常用來實現(xiàn)單個參數(shù)的綁定揽趾,負責(zé)將參數(shù)綁定到指定的變量或者值
函數(shù)原型:bool PDOStatement::bindValue(mixed $param, mixed $var [, $data_type])
參數(shù)說明:
(1) param:參數(shù)名台汇,如果采用“:name”形式的占位符,則param為“:name”形式的參數(shù)名篱瞎,如果采用“苟呐?”形式的占位符,則param為以1開始的索引
(2) var:需要綁定的變量或者值
(3) data_type:參數(shù)的類型俐筋,使用PDO::PARAM_*常量來指定參數(shù)類型牵素,默認為PDO::PARAM_STR
返回值:成功,返回TRUE澄者;失敗笆呆,返回FALSE
bindParam()和bindValue()的區(qū)別:
(1) bindParam()方法只能綁定變量而不能綁定值
(2) bindParam()方法采用引用的方式將變量綁定到占位符上,并且只有execute()方法被調(diào)用時粱挡,變量值才真正的傳遞到參數(shù)
3.PDOStatement::execute()
函數(shù)功能:執(zhí)行預(yù)處理的語句
函數(shù)原型:bool PDOStatement::execute (array $params)
參數(shù)說明:params為關(guān)聯(lián)數(shù)組赠幕,用來實現(xiàn)多個參數(shù)的綁定
返回值:成功,返回TRUE询筏;失敗榕堰,返回FALSE
4.PDOStatement::fetch()
函數(shù)功能:從結(jié)果集中獲取一行記錄,并將指針指向下一行記錄
函數(shù)原型:mixed PDOStatement::fetch(int $fetch_style)
函數(shù)參數(shù):
(1) fetch_style:控制記錄如何返回給調(diào)用者嫌套,此值必須是 PDO::FETCH_* 系列常量中的一個
返回值:返回值依賴于數(shù)據(jù)提取類(常見的是返回一維數(shù)組)局冰;如果失敗,返回FALSE
常用的PDO::FETCH_* 系列常量:
PDO::FETCH_ASSOC:返回一個索引為結(jié)果集列名的關(guān)聯(lián)數(shù)組
PDO::FETCH_NUM:返回一個索引為以0開始的索引數(shù)組
PDO::FETCH_BOTH(默認):返回一個索引為結(jié)果集列名和以0開始的列號的數(shù)組灌危,即采用兩種形式返回
PDO::FETCH_OBJ:返回一個屬性名對應(yīng)結(jié)果集列名的對象
5.PDOStatement::fetchAll()
函數(shù)功能:從結(jié)果集中獲取所有記錄
函數(shù)原型:mixed PDOStatement::fetchAll(int $fetch_style)
參數(shù)說明:
(1) fetch_style:控制記錄如何返回給調(diào)用者,此值必須是 PDO::FETCH_* 系列常量中的一個
返回值:返回值依賴于數(shù)據(jù)提取類(常見的是返回二維數(shù)組)碳胳;如果失敗勇蝙,返回FALSE
五、查詢操作
(1) 查詢操作
$sql = "SELECT name, age, sex FROM user WHERE id = $id";
$db->query($sql)->fetch(PDO::FETCH_ASSOC);
(2) 參數(shù)綁定(單個參數(shù))
$sql = "SELECT name, age, sex FROM user WHERE id = :id";
$command = $db->prepare($sql);
$command->bindParam(':id', $id, PDO::PARAM_INT);
$command->execute();
(3) 參數(shù)綁定(多個參數(shù))
$sql = "SELECT * FROM user WHERE id = :id AND age = :age";
$command = $db->prepare($sql);
$command->execute(array(':id' => $id, ':age' => $age));
六挨约、插入操作
$sql = "INSERT INTO user (name, age, sex) VALUES (:name, :age, :sex)";
$command = $db->prepare($sql);
$command->execute(array(':name' => $name, ':age' => $age, ':sex' => $sex));
七味混、更新操作
$sql = "UPDATE user SET name = :name, age = :age, sex = :sex WHERE id = :id";
$command = $db->prepare($sql);
$command->execute(array(':name' => $name, ':age' => $age, ':sex' => $sex, ':id' => $id));
八产雹、刪除操作
$sql = "DELETE FROM user WHERE id = :id";
$command = $db->prepare($sql);
$command->execute(array(':id' => $id));