PHP PDO是一種常用的數(shù)據(jù)操作方式,在PHP中,所有的數(shù)據(jù)庫(kù)操作都需要通過(guò)PDO實(shí)現(xiàn)。其內(nèi)部實(shí)現(xiàn)了各種數(shù)據(jù)操作的方法,是一種知名度較高的數(shù)據(jù)庫(kù)框架之一。
首先,我們需要建立一個(gè)數(shù)據(jù)庫(kù)連接,使用PDO的第一個(gè)參數(shù),即dsn,類似于以下示例:
$dsn = 'mysql:host=127.0.0.1;dbname=test;charset=UTF8';
$username = 'root';
$password = '';
$pdo = new PDO($dsn, $username, $password);
接下來(lái),我們可以使用PDO的query方法來(lái)執(zhí)行SQL語(yǔ)句:
$stmt = $pdo->query("SELECT * FROMusers
WHEREid
=1");
$result = $stmt->fetchAll();
在上述代碼中,使用PDO的query方法執(zhí)行了一條SQL語(yǔ)句并將結(jié)果放入一個(gè)對(duì)象中,我們可以使用PDO的fetchAll方法來(lái)獲取所有結(jié)果。
使用PDO操作數(shù)據(jù)庫(kù),還可以直接執(zhí)行INSERT、UPDATE和DELETE等操作:
$pdo->exec("INSERT INTOusers
(name
,age
,created
) VALUES ('張三', 18, NOW())");
在這種情況下,不需要執(zhí)行MySQL的SELECT語(yǔ)句進(jìn)行操作。實(shí)際上,PDO將所有查詢語(yǔ)句都轉(zhuǎn)化為了一種獨(dú)立于特定數(shù)據(jù)庫(kù)的抽象語(yǔ)言。
另外,我們也可以使用PDO的prepare方法來(lái)準(zhǔn)備一條SQL語(yǔ)句,在這個(gè)基礎(chǔ)上,使用bindValue方法來(lái)綁定參數(shù):
$stmt = $pdo->prepare('SELECT * FROMusers
WHEREname
=:name');
$stmt->bindValue(':name', '張三');
$stmt->execute();
$result = $stmt->fetchAll();
在上述代碼中,我們通過(guò)prepare方法準(zhǔn)備了一條SQL語(yǔ)句,然后使用bindValue方法來(lái)指定查詢條件,最后使用execute方法來(lái)執(zhí)行查詢并獲取結(jié)果。
在PDO操作中,還可以使用PDO的transaction方法來(lái)執(zhí)行事務(wù)操作:
$pdo->beginTransaction();
try {
$pdo->exec("INSERT INTOusers
(name
,age
,created
) VALUES ('張三', 18, NOW())");
$pdo->exec("INSERT INTOusers
(name
,age
,created
) VALUES ('李四', 20, NOW())");
$pdo->commit();
} catch (\PDOException $e) {
$pdo->rollBack();
}
在上述代碼中,我們先調(diào)用了PDO的beginTransaction方法來(lái)開啟事務(wù),然后執(zhí)行兩條SQL語(yǔ)句,最后使用commit方法來(lái)提交事務(wù)。如果任意一個(gè)步驟出現(xiàn)異常,我們就需要使用rollBack方法來(lái)回滾事務(wù)。
綜上所述,我們可以看到,PHP PDO作為一個(gè)成熟的數(shù)據(jù)庫(kù)操作框架,支持多種數(shù)據(jù)庫(kù),并且提供了一系列強(qiáng)大的特性來(lái)操作數(shù)據(jù)庫(kù)。無(wú)論是簡(jiǎn)單的查詢操作還是復(fù)雜的事務(wù)操作,都可以使用PHP PDO輕松完成。