我的Atlas
类执行递归数据探索,给定一组非连续但连续的col1
值,从table1
开始从MySQL $startingVal
读取。限制$totalVal
是任何给定会话期间工作单位的限制。在每次递归时,Atlas
将从不同的表中检索0到8(0-8)行。
致命错误:未捕获异常'Zend \ Db \ Adapter \ Exception \ RuntimeException'
带有消息'无计数结果集中没有行计数。' 在/path/vendor/Zend/zend-db/src/Adapter/Driver/Mysqli/Result.php:316
堆栈跟踪:
#0 /path/vendor/Zend/zend-db/src/ResultSet/AbstractResultSet.php(65):
的Zend \ DB \适配器\驱动\ mysqli的\ Result->计数()
#1 /path/vendor/Zend/zend-db/src/Adapter/Adapter.php(195):
的Zend \ DB \结果集\ AbstractResultSet->
初始化(对象(的Zend \ DB \适配器\驱动\的mysqli \结果))
#2 /path/modules/Flightplan/src/Flightplan/Atlas.php(110): Zend \ Db \ Adapter \ Adapter->查询('SELECT col1 ...',Array)
#3 /path/utility.php(46):
Flightplan \ Atlas-> shoulder_routes('30000001','1')
#4 {main}抛出/path/vendor/Zend/zend-db/src/Adapter/Driver/Mysqli/Result.php
在第316行
如果我正在正确读取错误和Zend源,Adapter
正在使用AbstractResultSet
资源初始化Mysqli\Result
(默认情况下缓冲)(默认情况下不缓冲),并且紧接着,试图计算它,这会引发错误。这是在我第一次通过适配器查询期间发生的,在递归之前。
public function initialize($dataSource)
{
// reset buffering
if (is_array($this->buffer)) {
$this->buffer = array();
}
if ($dataSource instanceof ResultInterface) {
$this->count = $dataSource->count(); // line 65
use Zend\Db\Adapter\Adapter;
public function __construct( array $configArray = null ){
...
$this->configArray = $configArray;
$this->adapter = new Adapter( $this->configArray );
}
public function shoulder_routes( $startingVal, $totalVal ){
...
$result = $this->adapter->query( 'SELECT col1 FROM table1
WHERE col1 >= ? LIMIT ?', array( $startingVal, $totalVal )); // line 110
$result->buffer(); // ADDED AFTER 1st error occurrence
...
}
我添加了$result->buffer();
,遗憾的是,因为错误发生在执行返回Atlas
之前,这是无用的。
Mysqli\Result
可以在初始化时设置为缓冲区。默认情况下,我是否使用缓存扩展Result
,我是否会在Atlas
中指定,例如: $this->adapter = new Adapter( $this->configArray,null,new MyMysqliResult() );
编辑:提供ResultInterface作为适配器的参数引发错误,因为Adapter期望ResultSet。但是,有可能扩展AbstractResultSet,以便IT在从Adaper \ Driver \ Mysqli传递给它的ResultSet上调用$ result-> count()之前调用$ result-> buffer()...
编辑:切换到PDO_Mysql Adapter \ Driver导致以下错误,如果我准备驱动程序提供的语句,我想这可能会解决
带有消息'SQLSTATE [42000]的未捕获异常'PDOException':语法错误或访问冲突:1064 SQL语法中有错误;检查与MySQL服务器版本对应的手册,以便在/path/vendor/Zend/zend-db/src/Adapter/Driver/Pdo/Statement.php的第1行''''附近使用正确的语法: 239
result->getResource()->fetchAll();
可能会在Atlas
稍后提供帮助,但在我获得这个机会之前,错误再次发生。我错过了什么?谢谢 -