如何查看Zend框架2由TableGateway生成的数据库查询(How to view db qu

2019-08-02 10:58发布

我是全新的,以ZF2,我试图用一个tableGateway在数据库中进行管理和更新条目。 我能够选择并没有问题更新项目,但插入时,我得到一个错误。 由于tableGateway类上飞创建查询,我怎么能看到查询本身?

$this->tableGateway->insert($data);

执行过程中出现的错误; 请稍后再试。 其他信息:Zend的\ DB \适配器\异常\ InvalidQueryException

文件:

/[redacted]/vendor/zendframework/zendframework/library/Zend/Db/Adapter/Driver/Pdo/Statement.php:220

信息:

Statement could not be executed

Answer 1:

非常优雅的方式怎么看的数据库查询是使用Zend的开发者工具。

如何使用它最简单的方法是将它composer.json文件来安装模块

..... "repositories": [ { "type": "composer", "url": "http://packages.zendframework.com/" } ], "require": { "php": ">=5.3.3", "zendframework/zend-developer-tools": "dev-master" }

看到文档



Answer 2:

只是一些告示@兹德内克 - machek答案:

1)要分析的数据库查询, BjyProfiler模块也应该被安装。

2)(跳过如果使用PDO),当我用BjyProfiler最后一次,有一个与mysqli的连接(一期buffer_results选项没有被传递给ProfilingStatement类)。 也许现在是固定的,或者我把它架在了错误的方式,但我的补丁是手动传递BjyProfiler / src目录/ BjyProfiler / DB /适配器/ ProfilingAdapter.php此参数:

case 'Zend\Db\Adapter\Driver\Mysqli\Mysqli':
    $statementPrototype = new Driver\Mysqli\ProfilingStatement($this->options['buffer_results']);
    break;

3) ZendDeveloperTools显示计数的查询,但不一一列举。 要列出在页面的底部,我在下面的方式修改视图/ Zend的开发者工具/工具栏/ 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>';


Answer 3:

在我来说,我只是在尝试捕捉涵盖这一个:$ë - > __ toString()方法是关键

try {
    this->tableGateway->insert($data);
} catch (\Exception $e) {
    \Zend\Debug\Debug::dump($e->__toString()); exit;
}


Answer 4:

对于我想做的事,在开发,这是确切地知道哪些查询了相关的运行在我处理的流程的每一步,这是我做了(使用PDO与MySQL / MariaDB的):

  1. 我去了Statement类( vendor/zendframework/zendframework/library/Zend/Db/Adapter/Driver/Pdo/Statement.php

  2. 我去执行方法和执行它,我把之前:

     ... error_log("DebugQ: ".print_r($this->getSql(),1).", ".print_r($this->getParameterContainer()->getNamedArray(),1)); try { $this->resource->execute(); } ... 

我想尽快的和一次性的解决方案,有记录在错误日志的查询。 我能够拥有所有的查询和他们的条件。



文章来源: How to view db queries generated by TableGateway in Zend Framework 2