PDO | MySQLi | |
---|---|---|
數(shù)據(jù)庫支持 | 12 種驅(qū)動(dòng) | 只有 MySQL |
范例 | OOP | 過程 + OOP |
預(yù)處理語句(客戶端側(cè)) | Yes | No |
1命名參數(shù) | Yes | No |
現(xiàn)在我想對(duì)于大多數(shù)開發(fā)人員來說,PDO 是首選的原因已經(jīng)很清楚了。所以讓我們深入研究它,并希望在本文中盡量涵蓋關(guān)于 PDO 你需要的了解的。
連接
第一步是連接到數(shù)據(jù)庫,由于 PDO 是完全面向?qū)ο蟮?,所以我們將使?PDO 類的實(shí)例。
我們要做的第一件事是定義主機(jī)、數(shù)據(jù)庫名稱、用戶名、密碼和數(shù)據(jù)庫字符集。
$host = 'localhost'; $db = 'theitstuff'; $user = 'root'; $pass = 'root'; $charset = 'utf8mb4'; $dsn = "mysql:host=$host;dbname=$db;charset=$charset"; $conn = new PDO($dsn, $user, $pass);
之后,正如你在上面的代碼中看到的,我們創(chuàng)建了 DSN 變量,DSN 變量只是一個(gè)保存數(shù)據(jù)庫信息的變量。對(duì)于一些在外部服務(wù)器上運(yùn)行 MySQL 的人,你還可以通過提供一個(gè) port=$port_number 來調(diào)整端口號(hào)。
最后,你可以創(chuàng)建一個(gè) PDO 類的實(shí)例,我使用了 $conn 變量,并提供了 $dsn、$user、$pass 參數(shù)。如果你遵循這些步驟,你現(xiàn)在應(yīng)該有一個(gè)名為 $conn 的對(duì)象,它是 PDO 連接類的一個(gè)實(shí)例。現(xiàn)在是時(shí)候進(jìn)入數(shù)據(jù)庫并運(yùn)行一些查詢。
一個(gè)簡(jiǎn)單的 SQL 查詢
現(xiàn)在讓我們運(yùn)行一個(gè)簡(jiǎn)單的 SQL 查詢。
$tis = $conn->query('SELECT name, age FROM students'); while ($row = $tis->fetch()) { echo $row['name']."\t"; echo $row['age']; echo "br>"; }
這是使用 PDO 運(yùn)行查詢的最簡(jiǎn)單形式。我們首先創(chuàng)建了一個(gè)名為 tis(TheITStuff 的縮寫 )的變量,然后你可以看到我們使用了創(chuàng)建的 $conn 對(duì)象中的查詢函數(shù)。
然后我們運(yùn)行一個(gè) while 循環(huán)并創(chuàng)建了一個(gè) $row 變量來從 $tis 對(duì)象中獲取內(nèi)容,最后通過調(diào)用列名來顯示每一行。
很簡(jiǎn)單,不是嗎?現(xiàn)在讓我們來看看預(yù)處理語句。
預(yù)處理語句
預(yù)處理語句是人們開始使用 PDO 的主要原因之一,因?yàn)樗峁┝丝梢宰柚?SQL 注入的語句。
有兩種基本方法可供使用,你可以使用位置參數(shù)或命名參數(shù)。
位置參數(shù)
讓我們看一個(gè)使用位置參數(shù)的查詢示例。
$tis = $conn->prepare("INSERT INTO STUDENTS(name, age) values(?, ?)"); $tis->bindValue(1,'mike'); $tis->bindValue(2,22); $tis->execute();
在上面的例子中,我們放置了兩個(gè)問號(hào),然后使用 bindValue() 函數(shù)將值映射到查詢中。這些值綁定到語句問號(hào)中的位置。
我還可以使用變量而不是直接提供值,通過使用 bindParam() 函數(shù)相同例子如下:
$name='Rishabh'; $age=20; $tis = $conn->prepare("INSERT INTO STUDENTS(name, age) values(?, ?)"); $tis->bindParam(1,$name); $tis->bindParam(2,$age); $tis->execute();
命名參數(shù)
命名參數(shù)也是預(yù)處理語句,它將值/變量映射到查詢中的命名位置。由于沒有位置綁定,因此在多次使用相同變量的查詢中非常有效。
$name='Rishabh'; $age=20; $tis = $conn->prepare("INSERT INTO STUDENTS(name, age) values(:name, :age)"); $tis->bindParam(':name', $name); $tis->bindParam(':age', $age); $tis->execute();
你可以注意到,唯一的變化是我使用 :name 和 :age 作為占位符,然后將變量映射到它們。冒號(hào)在參數(shù)之前使用,讓 PDO 知道該位置是一個(gè)變量,這非常重要。
你也可以類似地使用 bindValue() 來使用命名參數(shù)直接映射值。
獲取數(shù)據(jù)
PDO 在獲取數(shù)據(jù)時(shí)非常豐富,它實(shí)際上提供了許多格式來從數(shù)據(jù)庫中獲取數(shù)據(jù)。
你可以使用 PDO::FETCH_ASSOC 來獲取關(guān)聯(lián)數(shù)組,PDO::FETCH_NUM 來獲取數(shù)字?jǐn)?shù)組,使用 PDO::FETCH_OBJ 來獲取對(duì)象數(shù)組。
$tis = $conn->prepare("SELECT * FROM STUDENTS"); $tis->execute(); $result = $tis->fetchAll(PDO::FETCH_ASSOC);
你可以看到我使用了 fetchAll,因?yàn)槲蚁胍衅ヅ涞挠涗?。如果只需要一行,你可以?jiǎn)單地使用 fetch。
現(xiàn)在我們已經(jīng)獲取了數(shù)據(jù),現(xiàn)在是時(shí)候循環(huán)它了,這非常簡(jiǎn)單。
foreach ($result as $lnu){ echo $lnu['name']; echo $lnu['age']."br>"; }
你可以看到,因?yàn)槲艺?qǐng)求了關(guān)聯(lián)數(shù)組,所以我正在按名稱訪問各個(gè)成員。
雖然在定義希望如何傳輸遞數(shù)據(jù)方面沒有要求,但在定義 $conn 變量本身時(shí),實(shí)際上可以將其設(shè)置為默認(rèn)值。
你需要做的就是創(chuàng)建一個(gè) $options 數(shù)組,你可以在其中放入所有默認(rèn)配置,只需在 $conn 變量中傳遞數(shù)組即可。
$options = [ PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, ]; $conn = new PDO($dsn, $user, $pass, $options);
這是一個(gè)非常簡(jiǎn)短和快速的 PDO 介紹,我們很快就會(huì)制作一個(gè)高級(jí)教程。如果你在理解本教程的任何部分時(shí)遇到任何困難,請(qǐng)?jiān)谠u(píng)論部分告訴我,我會(huì)在那你為你解答。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
標(biāo)簽:麗江 十堰 重慶 巴彥淖爾 銅陵 臨沂 鷹潭 衡陽
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解PHP PDO簡(jiǎn)單教程》,本文關(guān)鍵詞 詳解,PHP,PDO,簡(jiǎn)單,教程,詳解,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。