## 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();
~~~