## 查询条件
在查询语句很复杂的情况下,DbModel提供的方法可能无法满足需要,此时,DbModel提供了两个方法执行原生的SQL语句。
~~~
DbModel::exec($sql, $params = [])
DbModel::query($sql, $params = [])
~~~
其中,exec方法执行一个更新性的SQL语句,如:insert,update,delete等,并返回影响的行数。
query方法执行一个查询性的SQL语句,如:select, show等,并返回查询的结果集。
sql中可使用“?”占位符进行参数化查询
params数组中的元素和参数占位符一一对应
参数表:
| 参数名称 | 必选 | 类型 | 说明 |
| --- | --- | --- | --- |
| sql | 是 | string | 执行的SQL语句 |
| params | 否 | array | 参数化查询要绑定的数据 |
用例:
~~~
/**
* 测试底层语句使用参数绑定直接插入数据
*
* 本用例演示了如何使用较底层的方法来执行一条参数化绑定的、更新性的SQL语句
* 要绑定的参数在SQL语句中用?占位,通过$params数组传递值,$params数组中的元素和参数占位符一一对应
*
* @return int 返回影响的行数
*/
public function testExec()
{
$table = $this->table;
$sql = "INSERT INTO `{$table}` SET `name` = ?, `age` = ?, `email` = ?, `create_at` = ?";
$params = ['杨文杰', 30, '88@qq.com', '2016-12-01 01:00:00'];
return $this->exec($sql, $params);
}
/**
* 测试底层语句参数绑定查询数据
*
* 本用例演示了如何使用较底层的方法来执行一条参数化绑定的、查询性的SQL语句
* 要绑定的参数在SQL语句中用?占位,通过$params数组传递值,$params数组中的元素和参数占位符一一对应
*
* @return array
*/
public function testQuery()
{
$table = $this->table;
$sql = "SELECT * FROM `{$table}` WHERE `name` = ? AND `age` = ?";
$params = ['杨文杰', 30];
$heroes = $this->query($sql, $params);
return $heroes;
}
~~~