私は 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);