我是全新的,以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
非常优雅的方式怎么看的数据库查询是使用Zend的开发者工具。
如何使用它最简单的方法是将它composer.json文件来安装模块
..... "repositories": [ { "type": "composer", "url": "http://packages.zendframework.com/" } ], "require": { "php": ">=5.3.3", "zendframework/zend-developer-tools": "dev-master" }
看到文档
只是一些告示@兹德内克 - 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>';
在我来说,我只是在尝试捕捉涵盖这一个:$ë - > __ toString()方法是关键
try {
this->tableGateway->insert($data);
} catch (\Exception $e) {
\Zend\Debug\Debug::dump($e->__toString()); exit;
}
对于我想做的事,在开发,这是确切地知道哪些查询了相关的运行在我处理的流程的每一步,这是我做了(使用PDO与MySQL / MariaDB的):
我去了Statement类( vendor/zendframework/zendframework/library/Zend/Db/Adapter/Driver/Pdo/Statement.php
)
我去执行方法和执行它,我把之前:
... error_log("DebugQ: ".print_r($this->getSql(),1).", ".print_r($this->getParameterContainer()->getNamedArray(),1)); try { $this->resource->execute(); } ...
我想尽快的和一次性的解决方案,有记录在错误日志的查询。 我能够拥有所有的查询和他们的条件。