本文簡單介紹PDO對象下各個函數的使用方法。
事先聲明:本文不詳盡,見具體請前往PHP手冊參閱。
安裝PDO
PDO其實就是一個PHP的模塊。
Windows
在Windows下面很簡單
打開PHP所在文件夾下的php.ini配置文件
先改好PHP的拓展目錄,也就是extension的目錄(可以通過Search跳轉),一半理論上把Windows對應那行前面的“;”去掉就好了。
在后文里,把extension=php_pdo.dll
和extension=php_pdo_XXX.dll
(XXX表示你所用的數據庫類型)前面的“;”去掉
Linux
至于Linux(測試環境Ubuntu16.04,PHP7),使用APT安裝的情況下它默認是開好了PDO的,不用再去編譯。
測試環境Ubuntu16.04,PHP7:首先我們應該知道在linux下方便地開啟模塊是用phpenmod命令。
然后我們在裝好php之后就可以在bash里phpenmod pdo
來先打開PDO擴展。
然后sudo apt install php7.0-mysql
(版本注意自行更改)。
這樣它會將編譯好的pdo_mysql模塊文件放到你的mod_avaliable目錄,現在就可以通過phpenmod pdo_mysql
來開啟PDO中mysql的驅動。
編譯安裝方法這里不細說。
使用PDO
正如我們所知,PDO是OO(面向對象)的,所以在使用它前我們需要實例化一個PDO對象。
1. 實例化
命令
$myPDO = new PDO($dsn[, $username[, $password[, $driver_options]]])
注:“[”與“]”中內容表示可空。
解析
我們可以看見一共有四個參數
$dsn 就是DSN,關于DSN是啥不知道的點我。所以,舉個栗子我們連接MySQL數據庫就可以這樣在實例化之前這樣寫$dsn = "mysql:host=localhost;dbname=test";
$username 就是你對應的數據庫的用戶名。
$password 就是用戶名對應的密碼。
最后是$driver_options,需要說明的是,前三個都是字符串形式,而它則是數組形式,一般不是特殊需求不用寫它,想了解的自己去看手冊【畢竟這里只是簡單介紹對吧】。
2. 對象函數
PDO實例化后就可以通過這個實例化對象來進行數據庫sql操作。
常用的有如下函數
函數 | 描述 |
---|---|
PDO::exec | 執行一條 SQL 語句,并返回受影響的行數 |
PDO::query | 執行一條SQL語句,返回一個PDOStatement對象 |
PDO::prepare | 準備要執行的SQL語句,返回一個PDOStatement對象 |
PDO::quote | 返回一個添加引號的字符串,用于SQl語句中 |
PDO::lastInsertId | 返回最后插入行的ID或序列值 |
PDO::setAttribute | 設置屬性 |
可以看到exec和query非常相似,由于返回內容的不同,我們一般使用exec進行增刪改操作,使用query進行查操作。
在通過query得到的PDOStatement對象上我們可以進行進一步操作(往往是數據的獲取,即查操作)。
函數 | 描述 |
---|---|
PDOStatement::execute | 執行一條預處理語句(prepare) |
PDOStatement::rowCount() | 返回受上一個 SQL 語句影響的行數 |
PDOStatement::fetch | 從結果集中獲取下一行 |
PDOStatement::fetchAll | 返回一個包含結果集中所有行的數組 |
PDOStatement::fetchColumn | 從結果集中的下一行返回單獨的一列 |
PDOStatement::fetchObject | 獲取下一行并作為一個對象返回 |
PDOStatement::bindParam | 綁定一個參數到指定變量名 |
PDOStatement::bindValue | 把一個值綁定到一個參數 |
具體用法詳見手冊。
舉例
這里我們通過增刪改查的例子來進行學習。
增
一般我們增直接就是使用exec函數,通過返回的影響的行數判斷增操作是否成功完成。
$myPDOExample = new PDO("mysql:host=localhost;dbname=test","root","root");
$sql = "INSERT INTO user ('name', 'password', 'phone' ) VALUES ('用戶1', '123456', '10086'),('用戶2', '654321', '10010');";
$result = myPDOExample::exec($sql);
例子表示向user表中插入了兩條數據
不知道怎么SQL中Insert插入數據的看這里
刪
同樣也是exec
$myPDOExample = new PDO("mysql:host=localhost;dbname=test","root","root");
$sql = "DELETE FROM fruit WHERE color = 'red' ;";
$result = myPDOExample::exec($sql);
例子表示刪除fruit表中所有color的值為red的數據
改
同樣也是exec
$myPDOExample = new PDO("mysql:host=localhost;dbname=test","root","root");
$sql = "UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson' ;";
$result = myPDOExample::exec($sql);
表示把所有的LastName值為Wilson的行中的FirstName值改為Fred
查
查是重頭戲。
我們首先通過如上的步驟進行查的準備
$myPDOExample = new PDO("mysql:host=localhost;dbname=test","root","root");
$sql = "SELECT * FROM user WHERE gender='female' ;";
這條SQL表示從user表里取出所有性別gender是女female的行的所有數據(即*)。
我們通過query先對它進行查詢操作,并獲得一個PDOStatement對象。
$result = myPDOExample::query($sql);
這里需要根據下一步對數據的操作來選取$result的函數。
$dataString = $resylt::fetch() //知道只有一個女的,所以只需要取一行。
$dataArray = $resylt::fetchAll() //有好多女的,以數組方式全取出來并直接表達
$dataObject = $resylt::fetchObject() //有好多女的,以對象方式全取出來并進一步操作