无法从zf3中的ResultSet对象数组中获取数据

时间:2016-11-09 16:05:01

标签: php zend-framework3

我正在使用zend framework3并使用Mysql驱动程序作为数据库。 我使用以下代码来获取数据:

        $con = $this->adapter;
        $select = $this->sql->select();
        $select->from('nav_menu');
        $selectString = $this->sql->getSqlStringForSqlObject($select);
        $results = $con->query($selectString, $con::QUERY_MODE_EXECUTE);
        $resultSet = new ResultSet();
        $resultSet->initialize($results); 

当我var_dump这个数据时,我得到的结果如下:

   Zend\Db\ResultSet\ResultSet Object
   (
    [allowedReturnTypes:protected] => Array
    (
        [0] => arrayobject
        [1] => array
    )
    [arrayObjectPrototype:protected] => ArrayObject Object
    (
        [storage:ArrayObject:private] => Array
            (
            )
        )

[returnType:protected] => arrayobject
[buffer:protected] => 
[count:protected] => 
[dataSource:protected] => Zend\Db\ResultSet\ResultSet Object
    (
        [allowedReturnTypes:protected] => Array
            (
                [0] => arrayobject
                [1] => array
            )

        [arrayObjectPrototype:protected] => ArrayObject Object
            (
                [storage:ArrayObject:private] => Array
                    (
                    )

            )

        [returnType:protected] => arrayobject
        [buffer:protected] => -1
        [count:protected] => 
        [dataSource:protected] => Zend\Db\Adapter\Driver\Mysqli\Result Object
            (
                [resource:protected] => mysqli_result Object
                    (
                        [current_field] => 0
                        [field_count] => 8
                        [lengths] => 
                        [num_rows] => 15
                        [type] => 0
                    )

                [isBuffered:protected] => 1
                [position:protected] => 0
                [numberOfRows:protected] => -1
                [currentComplete:protected] => 
                [nextComplete:protected] => 
                [currentData:protected] => 
                [statementBindValues:protected] => Array
                    (
                        [keys] => 
                        [values] => Array
                            (
                            )

                    )

                [generatedValue:protected] => 0
            )

        [fieldCount:protected] => 8
        [position:protected] => 0
    )

[fieldCount:protected] => 
[position:protected] => 0
)

我收到错误当我迭代这个以获得如下的值时:

       foreach ($resultSet as $key => $value) {
            $array[$i]['id'] = $value->id;
            $array[$i]['name'] = $value->name;
            $array[$i]['label'] = $value->label;
            $array[$i]['route'] = $value->route;
            $array[$i]['parent_id'] = $value->parent_id;
            $i++;
        }

我不是我错的地方。虽然有num_rows是15.这在ZF2正常工作。 任何人的任何帮助表示赞赏。

我尝试了很多,并发现如果替换代码

    $selectString = $this->sql->getSqlStringForSqlObject($select);
    $results = $con->query($selectString, $con::QUERY_MODE_EXECUTE);

使用

    $statement = $this->sql->prepareStatementForSqlObject($select);
    $results = $statement->execute(); 

然后我得到了结果。但我的问题为什么我没有通过

得到结果
    $selectString = $this->sql->getSqlStringForSqlObject($select);
    $results = $con->query($selectString, $con::QUERY_MODE_EXECUTE);

1 个答案:

答案 0 :(得分:1)

自版本2.4起,

getSqlStringForSqlObject已弃用。但是,我不知道这是否是它不再起作用的原因。

根据docs,有两种方法可以解决这个问题。使用准备语句,您使用的完全相同:

$statement = $sql->prepareStatementForSqlObject($select);
$results = $statement->execute();

执行您可能正在寻找的查询:

$selectString = $sql->buildSqlString($select);
$results = $adapter->query($selectString, $adapter::QUERY_MODE_EXECUTE);