大約 80% 的 web 應用程式由 php 提供支援。類似地,sql 也是如此。php 5.5 版本之前,我們有用於訪問 mysql 資料庫的 mysql_ 命令,但由於安全性不足,它們最終被棄用。
棄用這件事是發生在 2013 年的 php 5.5 上,我寫這篇文章的時間是 2018 年,php 版本為 7.2。mysql_ 的棄用帶來了訪問資料庫的兩種主要方法:mysqli 和 pdo 庫。
雖然 mysqli 庫是官方指定的,但由於 mysqli 只能支援 mysql 資料庫,而 pdo 可以支援 12 種不同型別的資料庫驅動程式,因此 pdo 獲得了更多的讚譽。此外,pdo 還有其它一些特性,使其成為大多數開發人員的更好選擇。你可以在下表中看到一些特性比較:
pdomysqli
資料庫支援12 種驅動只有 mysql
範例oop過程 + oop
預處理語句(客戶端側)yesno
1命名引數yesno
現在我想對於大多數開發人員來說,pdo 是首選的原因已經很清楚了。所以讓我們深入研究它,並希望在本文中盡量涵蓋關於 pdo 你需要的了解的。
連線第一步是連線到資料庫,由於 pdo 是完全物件導向的,所以我們將使用 pdo 類的例項。
我們要做的第一件事是定義主機、資料庫名稱、使用者名稱、密碼和資料庫字符集。
$host = 『localhost』;
$db = 『theitstuff』;
$user = 『root』;
$pass = 『root』;
$charset = 『utf8mb4』;
d sn
="my
sql:
host
=dsn = "mysql:host=
dsn="m
ysql
:hos
t=host;dbname=db;
char
set=
db;charset=
db;cha
rset
=charset";
c on
n=ne
wpdo
(conn = new pdo(
conn=n
ewpd
o(dsn, $user, $pass);
之後,正如你在上面的**中看到的,我們建立了 dsn 變數,dsn 變數只是乙個儲存資料庫資訊的變數。對於一些在外部伺服器上執行 mysql 的人,你還可以通過提供乙個 port=$port_number 來調整埠號。
最後,你可以建立乙個 pdo 類的例項,我使用了 $conn 變數,並提供了 dsn
、dsn、
dsn、
user、$pass 引數。如果你遵循這些步驟,你現在應該有乙個名為 $conn 的物件,它是 pdo 連線類的乙個例項。現在是時候進入資料庫並執行一些查詢。
乙個簡單的 sql 查詢
現在讓我們執行乙個簡單的 sql 查詢。
$tis = $conn->query(『select name, age from students』);
while ($row = $tis->fetch())
echo $row[『name』]."\t";
echo $row[『age』];
echo "
";這是使用 pdo 執行查詢的最簡單形式。我們首先建立了乙個名為 tis(theitstuff 的縮寫 )的變數,然後你可以看到我們使用了建立的 $conn 物件中的查詢函式。
然後我們執行乙個 while 迴圈並建立了乙個 $row 變數來從 $tis 物件中獲取內容,最後通過呼叫列名來顯示每一行。
很簡單,不是嗎?現在讓我們來看看預處理語句。
預處理語句
預處理語句是人們開始使用 pdo 的主要原因之一,因為它提供了可以阻止 sql 注入的語句。
有兩種基本方法可供使用,你可以使用位置引數或命名引數。
位置引數
讓我們看乙個使用位置引數的查詢示例。
$tis = $conn->prepare(「insert into students(name, age) values(?, ?)」);
$tis->bindvalue(1,『mike』);
$tis->bindvalue(2,22);
$tis->execute();
在上面的例子中,我們放置了兩個問號,然後使用 bindvalue() 函式將值對映到查詢中。這些值繫結到語句問號中的位置。
我還可以使用變數而不是直接提供值,通過使用 bindparam() 函式相同例子如下:
$name=『rishabh』; $age=20;
$tis = $conn->prepare(「insert into students(name, age) values(?, ?)」);
t is
−>bi
ndpa
ram(
1,
tis->bindparam(1,
tis−
>bi
ndpa
ram(
1,name);
t is
−>bi
ndpa
ram(
2,
tis->bindparam(2,
tis−
>bi
ndpa
ram(
2,age);
$tis->execute();
命名引數
命名引數也是預處理語句,它將值/變數對映到查詢中的命名位置。由於沒有位置繫結,因此在多次使用相同變數的查詢中非常有效。
$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 作為佔位符,然後將變數對映到它們。冒號在引數之前使用,讓 pdo 知道該位置是乙個變數,這非常重要。
你也可以類似地使用 bindvalue() 來使用命名引數直接對映值。
獲取資料
pdo 在獲取資料時非常豐富,它實際上提供了許多格式來從資料庫中獲取資料。
你可以使用 pdo::fetch_assoc 來獲取關聯陣列,pdo::fetch_num 來獲取數字陣列,使用 pdo::fetch_obj 來獲取物件陣列。
$tis = $conn->prepare(「select * from students」);
$tis->execute();
$result = $tis->fetchall(pdo::fetch_assoc);
你可以看到我使用了 fetchall,因為我想要所有匹配的記錄。如果只需要一行,你可以簡單地使用 fetch。
現在我們已經獲取了資料,現在是時候迴圈它了,這非常簡單。
foreach ($result as $lnu){
echo $lnu[『name』];
echo $lnu[『age』]."
";你可以看到,因為我請求了關聯陣列,所以我正在按名稱訪問各個成員。
雖然在定義希望如何傳輸遞資料方面沒有要求,但在定義 $conn 變數本身時,實際上可以將其設定為預設值。
你需要做的就是建立乙個 $options 陣列,你可以在其中放入所有預設配置,只需在 $conn 變數中傳遞陣列即可。
$options = [
pdo::attr_default_fetch_mode => pdo::fetch_assoc,
c on
n=ne
wpdo
(conn = new pdo(
conn=n
ewpd
o(dsn, $user, $pass, $options);
PHP PDO簡單操作
pdo php data object,php資料物件 是一種純物件導向的操作風格,在新版的php中,php封裝了一套pdo擴充套件庫,專門用來操作不同型別的資料庫!作用 由於資料庫的差異性,各個資料庫的呼叫不是完全相同的,同樣的程式如果使用不同的資料庫存放資料時,需要對程式的資料處理部分進行改動,...
php pdo 簡單使用 (一)
簡介 pdo擴充套件為php訪問資料庫定義了乙個輕量級的 一致性的介面,它提供了乙個資料訪問抽象層,這樣,無論使用什麼資料庫,都可以通過一致的函式執行查詢和獲取資料。即提供了乙個資料庫訪問抽象層能使得我們通過一致的函式和寫法來操作不同資料庫,有利於日後對資料庫的遷移,當然也有安全方面的提公升。對比 ...
PHP PDO操作MySQL基礎教程
php中的pdo擴充套件為php訪問資料庫定義了乙個輕量級的 一致性的介面,它提供了乙個資料訪問抽象層,www.cppcns.com這樣,無論使用什麼資料庫,都可以通過一致的函式執行查詢和獲取資料。pdo支援的php版本為php5.1以及更高的版本,而且在php5.2下pdo預設為開啟狀態,下面是在...