CI框架中有一个查看最后一条sql执行的方法
/system/database/DB_driver.php 文件的1085行左右
public function last_query()
{
return end($this->queries);
}
有时需要查看一个页面中执行的所有sql语句,这在优化时很有帮助。减少sql查询次数,也是优化的一个方面,其实只要把返回语句的end()去掉就行了!在DB_driver.php中新增如下方法
public function total_query()
{
array_walk($this->queries, function(&$v, $k){
$v = preg_replace('/\n/', ' ', $v) .' #query time:'. $this->query_times[$k] . ' sec';
});
return $this->queries;
}
在控制器需要的地方断点执行
echo '<pre>';
print_r($this->sdb->total_query());die;
就能看到当前业务中在断点前执行的所有sql语句以及各语句的执行时间!
Array
(
[0] => SELECT `codes` FROM `advert` WHERE `id` = 16 #query time:0.00062799453735352 sec
[1] => SELECT `id`, `name`, `classify`, IF(id > 127 and classify = 1, 'game', 'html') as gamedir FROM `game_list` WHERE `id` in (20,38,15,67) ORDER BY field(id, 20, 38, 15, 67) #query time:0.0010020732879639 sec
)