如何在Zend Framework 2中查看TableGateway生成的数据库查询

Wig*_*ige 4 zend-framework2

我是ZF2的新手,我正在尝试使用tableGateway来管理和更新数据库中的条目.我可以毫无问题地选择和更新项目,但插入时出现错误.由于tableGateway类动态创建查询,我如何查看查询本身?

$this->tableGateway->insert($data);
Run Code Online (Sandbox Code Playgroud)

执行期间发生错误; 请稍后再试.其他信息:Zend\Db\Adapter\Exception\InvalidQueryException

文件:

/[redacted]/vendor/zendframework/zendframework/library/Zend/Db/Adapter/Driver/Pdo/Statement.php:220
Run Code Online (Sandbox Code Playgroud)

信息:

Statement could not be executed
Run Code Online (Sandbox Code Playgroud)

Den*_*bov 5

只是@ 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;
Run Code Online (Sandbox Code Playgroud)

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>';
Run Code Online (Sandbox Code Playgroud)