PHP PDO 簡單教程
大約 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 還有其它一些特性,使其成為大多數開發人員的更好選擇。你可以在下表中看到一些特性比較:
PDO | MySQLi | |
---|---|---|
資料庫支援 | 12 種驅動 | 只有 MySQL |
範例 | OOP | 過程 + OOP |
預處理語句(客戶端側) | Yes | No |
1命名引數 | Yes | No |
現在我想對於大多數開發人員來說,PDO 是首選的原因已經很清楚了。所以讓我們深入研究它,並希望在本文中儘量涵蓋關於 PDO 你需要的瞭解的。
連線
第一步是連線到資料庫,由於 PDO 是完全物件導向的,所以我們將使用 PDO 類的例項。
我們要做的第一件事是定義主機、資料庫名稱、使用者名稱、密碼和資料庫字符集。
$host = 'localhost';
$db = 'theitstuff';
$user = 'root';
$pass = 'root';
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$conn = new PDO($dsn, $user, $pass);
之後,正如你在上面的程式碼中看到的,我們建立了 DSN 變數,DSN 變數只是一個儲存資料庫資訊的變數。對於一些在外部伺服器上執行 MySQL 的人,你還可以通過提供一個 port=$port_number
來調整埠號。
最後,你可以建立一個 PDO 類的例項,我使用了 $conn
變數,並提供了 $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 "<br>";
}
這是使用 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(?, ?)");
$tis->bindParam(1,$name);
$tis->bindParam(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']."<br>";
}
你可以看到,因為我請求了關聯陣列,所以我正在按名稱訪問各個成員。
雖然在定義希望如何傳輸遞資料方面沒有要求,但在定義 $conn
變數本身時,實際上可以將其設定為預設值。
你需要做的就是建立一個 $options
陣列,你可以在其中放入所有預設配置,只需在 $conn
變數中傳遞陣列即可。
$options = [
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
];
$conn = new PDO($dsn, $user, $pass, $options);
這是一個非常簡短和快速的 PDO 介紹,我們很快就會製作一個高階教程。如果你在理解本教程的任何部分時遇到任何困難,請在評論部分告訴我,我會在那你為你解答。
via: http://www.theitstuff.com/easiest-pdo-tutorial-basics
作者:Rishabh Kandari 選題:lujun9972 譯者:MjSeven 校對:wxy
訂閱“Linux 中國”官方小程式來檢視
相關文章
- PHP PDO 簡單登陸操作PHP
- PHP的PDOPHP
- Ajax+PHP簡單入門教程PHP
- PDO--PHP Data ObjectsPHPObject
- php5模組pdo、pdo_mysql、mysqli的新增PHPMySql
- PHP物件導向07_PDOPHP物件
- PHP PDO獲取結果集PHP
- PHP + Laravel 的簡單應用教程 — ajax 的使用PHPLaravel
- PHP 資料庫擴充之 PDOPHP資料庫
- 《簡明 PHP 教程》01 關於 PHPPHP
- pprof簡單教程
- PHP系列(十二)資料庫抽象層pdoPHP資料庫抽象
- PHP Composer 簡明教程PHP
- php面試簡單整理PHP面試
- PHP--簡單DemoPHP
- 教你如何用php pdo連線資料庫PHP資料庫
- 安裝PHP之PDO_MYSQL擴充套件PHPMySql套件
- butterfly簡單使用教程
- grpc簡單教程RPC
- 最簡單jboss教程!
- 《簡明 PHP 教程》00 開篇PHP
- 《簡明 PHP 教程》04 基礎PHP
- 《簡明 PHP 教程》02 安裝PHP
- PHP socket 的簡單理解PHP
- php簡單常用的APIPHPAPI
- php ip定位簡單使用PHP
- PHP簡單計算器PHP
- PHP 遠端使用 PDO 連線 access 資料庫PHP資料庫
- PHP中MySQL、MySQLi和PDO的用法和區別PHPMySql
- PHP5中PDO(PHPDATAOBJECT)模組基礎詳解PHPObject
- docker簡單實用教程Docker
- Mackdown簡單的使用教程Mac
- MacDroid使用簡單教程~Mac
- ROM簡單製作教程
- GitHub簡單入門教程Github
- PHP生成簡單二維碼PHP
- php實現簡單的SQLBuilderPHPSQLUI
- PHP專案中如何用PDO查詢臨時表?PHP