## 查詢條件
在查詢語句很復雜的情況下,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;
}
~~~