## PDO操作類MyPdo
DbModel使用MyPdo類來連接和操作數據庫。
MyPdo類并不是直接面向應用層開發用戶的,它只是供DbModel操作數據庫的一個類庫。
應用層開發用戶可不必理會此文檔。
#### 重構了MyPdo類,相對于之前使用的MyPdo類,進行了下列改變:
* 實例被創建時即連接數據庫,而非執行查詢時連接。
* 優化了參數化查詢的參數綁定方法,棄用命名參數綁定,改用順序綁定。此改變為DbModel實現完全的參數化查詢提供了基礎。
* DbModel應為每一個數據庫連接創建一個唯一的MyPdo實例,由DbModel自行維護此單例。此改變為DbModel連接多庫提供基礎。
* 不再維護$PDOStatement類實例變量。
* 區分更新性的SQL命令(exec)和查詢性的SQL命令的執行方法(query)。
* * * * *
#### 創建實例
~~~
MyPdo::__construct($dbConfig, $persistent = false)
~~~
使用new關鍵字來創建一個MyPdo類實例
參數表:
| 參數名稱 | 必選 | 類型 | 說明 |
| --- | --- | --- | --- |
| dbConfig | 是 | array | 數據庫連接信息 |
| persistent | 否 | boolean | 是否持久連接 |
用例:
~~~
$dbConfig = [
'driver' =>'mysql',
'host' =>'localhost',
'port' =>'3306',
'user' =>'root',
'passwd' =>'',
'dbname' =>'crm',
'charset' =>'utf8'
];
//是否持久連接
$persistent = false;
$myPdo = new MyPdo($dbConfig);
~~~
實例創建時即連接數據庫。如連接數據庫失敗,會拋出相應的PDOException異常。
* * * * *
#### 執行更新性的SQL語句
~~~
MyPdo::exec($sql, $params = [])
~~~
用于執行諸如insert, update, delete, replace等更新性的SQL語句,返回影響的行數。
參數表:
| 參數名稱 | 必選 | 類型 | 說明 |
| --- | --- | --- | --- |
| sql | 是 | string | 要執行的SQL語句,包含參數綁定的占位符“?” |
| params | 否 | array | 參數綁定的值列表 |
用例:
~~~
$sql = 'UPDATE `employees` SET `name` = ?, `email` = ?, `age` = ? WHERE id = ?';
$params = ['張三', '888@qq.com', 29, 2];
//返回影響的行數
$rowsAffected = $myPdo->exec($sql, $params);
~~~
參數綁定的占位符使用“?”,要綁定的參數放在$params數組里,按順序一一對應。
* * * * *
#### 執行查詢性的SQL語句
~~~
MyPdo::query($sql, $params = [])
~~~
執行select等查詢性的SQL語句,并返回數據集
參數表:
| 參數名稱 | 必選 | 類型 | 說明 |
| --- | --- | --- | --- |
| sql | 是 | string | 要執行的SQL語句,包含參數綁定的占位符“?” |
| params | 否 | array | 參數綁定的值列表 |
用例:
~~~
$sql = 'SELECT * FROM `employees` WHERE `department_id` = ? AND `age` > ? AND `sex` = ?';
$params = [2, 30, '男'];
$rows = $myPdo->query($sql, $params);
~~~
參數綁定的占位符使用“?”,要綁定的參數放在$params數組里,按順序一一對應。
#### 獲取多行數據
~~~
MyPdo::getRows($sql, $params = [], $primkey = false)
~~~
獲取多行數據的封裝
參數表:
| 參數名稱 | 必選 | 類型 | 說明 |
| --- | --- | --- | --- |
| sql | 是 | string | 要執行的SQL語句,包含參數綁定的占位符“?” |
| params | 否 | array | 參數綁定的值列表 |
| primkey | 否 | boolean | 是否返回以主鍵為下標的二維數組 |
用例:
~~~
$sql = 'SELECT * FROM `employees` WHERE `department_id` = ? AND `age` > ? AND `sex` = ?';
$params = [2, 30, '男'];
$rows = $myPdo->getRows($sql, $params, true);
~~~
* * * * *
#### 獲取一行數據
~~~
MyPdo::getRow($sql, $params = [])
~~~
獲取一行數據的封裝
參數表:
| 參數名稱 | 必選 | 類型 | 說明 |
| --- | --- | --- | --- |
| sql | 是 | string | 要執行的SQL語句,包含參數綁定的占位符“?” |
| params | 否 | array | 參數綁定的值列表 |
用例:
~~~
$sql = 'SELECT * FROM `employees` WHERE id = ?';
$params = [12];
$row = $myPdo->getRow($sql, $params);
~~~
* * * * *
#### 獲取一個值
~~~
MyPdo::getOne($sql, $params = [])
~~~
獲取一個值的封裝
參數表:
| 參數名稱 | 必選 | 類型 | 說明 |
| --- | --- | --- | --- |
| sql | 是 | string | 要執行的SQL語句,包含參數綁定的占位符“?” |
| params | 否 | array | 參數綁定的值列表 |
用例:
~~~
$sql = 'SELECT `name` FROM `employees` WHERE id = ?';
$params = [12];
$hisName = $myPdo->getOne($sql, $params);
~~~
* * * * *
#### 獲取最后執行的SQL語句
~~~
MyPdo::getLastSql()
~~~
獲取最后執行的SQL語句
用例:
~~~
$sql = $myPdo->getLastSql();
~~~
* * * * *
#### 獲取最后插入行的主鍵id
~~~
MyPdo::lastInsertId()
~~~
獲取最后插入行的主鍵id
用例:
~~~
$id = $myPdo->lastInsertId();
~~~
* * * * *
#### 開啟事務
~~~
MyPdo::beginTransaction()
~~~
開啟事務
用例:
~~~
$myPdo->beginTransaction();
~~~
* * * * *
#### 回滾事務
~~~
MyPdo::rollBack()
~~~
開啟事務
用例:
~~~
$myPdo->rollBack();
~~~
* * * * *
#### 提交事務
~~~
MyPdo::commit()
~~~
開啟事務
用例:
~~~
$myPdo->commit();
~~~
* * * * *
#### 關閉連接
~~~
MyPdo::close()
~~~
關閉連接
用例:
~~~
$myPdo->close();
~~~