首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql fetch()返回FALSE

问Mysql fetch()返回FALSE
EN

Stack Overflow用户
提问于 2018-06-13 13:27:40
回答 1查看 760关注 0票数 0

目前,我在mysql表的流结果方面遇到了问题。此表有超过10,000,000行。和结构

ID,IndexField1,Data1

ID上有Primaryindex,IndexField1上有索引。

在PHP中,我绑定到流数据的部分(大约7个Mio)来计算和验证某些部分。因此,我有一个回调,它是为每个响应调用的。

代码语言:javascript
复制
public function streamForIndexedColumn(int $columnId, callable $callback){
$stmt = NULL;
$sql = "SELECT id, indexedField, data1 FROm myTable WHERE indexedField1 = ?;";
if (! ($stmt = $this->mysqlConn->prepare ( $sql ))) {
   throw new Exception("ERROR");
}
try {
    if (! $stmt->bind_param ( "i", $columnId)) {
       throw new Exception( "Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error );
    }
    $item = new Item ();
    if (!$stmt->bind_result($item->id,$item->indexfield1,$item->data1)) {
            throw new Exception( "Binding output parameters failed: (" . $stmt->errno . ") " . $stmt->error );
    }

    if (! $stmt->execute ()) {
        throw new Exception("Execute failed: (" . $stmt->errno . ") " . $stmt->error );
    }
    $cnt = 0;
    while ( $row = $stmt->fetch() ) {
        $cnt++;
        $callback($cnt, $item);
    }
    if ($row ===FALSE){
        throw new Exception("MySQL Error: (" . $stmt->errno . ") " . $stmt->error );
    } finally{
        $stmt->close ();
    }
}

这有时会持续几个小时。有时它正在运行,有时由于消息"MySQL Error:(0)“而失败。

我是不是以错误的方式得到错误的原因?服务器或客户端上是否存在任何可能产生此错误的可配置限制?

我使用的是Mysql 5.17.19和PHP 7.0.29。

EN

回答 1

Stack Overflow用户

发布于 2018-06-13 13:35:13

$row === FALSE中的异常将始终被抛出,因为在获取所有行之后,$row将为false。

$stmt->errno将返回0,因为(引用docs:http://php.net/manual/en/mysqli.errno.php)将返回上一个MySQL函数的错误号,如果没有发生错误,则返回0(零)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50838482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档