只是对@zdenek-machek 的一些通知回答:
1) 要分析数据库查询,BjyProfiler
还应安装模块。
2)(如果你使用PDO跳过)当我BjyProfiler
上次使用时,mysqli连接有问题(buffer_results
选项没有传递给ProfilingStatement
类)。也许现在修好了,或者我设置的方式不对,但是我的补丁是在BjyProfiler/src/BjyProfiler/Db/Adapter/ProfilingAdapter.php中手动传递这个参数:
case 'Zend\Db\Adapter\Driver\Mysqli\Mysqli':
$statementPrototype = new Driver\Mysqli\ProfilingStatement($this->options['buffer_results']);
break;
3)ZendDeveloperTools
显示查询计数,但不列出它们。为了在页面底部列出,我通过以下方式修改了 view/zend-developer-tools/toolbar/toolbar.phtml:
<!-- END Zend Developer Toolbar -->
<?php
$queryProfiles = $this->getHelperPluginManager()->getServiceLocator()
->get('Zend\Db\Adapter\Adapter')->getProfiler()->getQueryProfiles();
echo '<ol>';
foreach($queryProfiles as $queryObj)
{
$query = $queryObj->toArray();
echo '<li>';
echo '<b>' . ($query['elapsed']*1000) . '</b> ms<br/>';
echo $query['sql'];
if(count($query['parameters']))
{
echo '<br/><i>Parameters:</i> ';
$list = array();
foreach($query['parameters'] as $key => $value)
$list[] = '?'. $this->escapeHtml($key)
."='". $this->escapeHtml($value) ."'";
echo implode(', ', $list);
}
echo '</li>';
}
echo '</ol>';