2

重複の可能性:
新しいMysqliオブジェクトがNull

MVCフレームワーク用のデータベースクラスの構築から始めました。これを構築している間、私はそれを正しく機能させるために単純なクエリとテーブルを試しています。

私は次のクエリを実行しようとしていました:

SELECT * FROM mvc_test

これは3行を返すはずです:

1 | テスト

2 | test2

3 | test3

次の方法を使用してクエリを実行します。

<?php $this->result = $this->conn->query($this->q); ?>

$ this->connは次のとおりです。

<?php 
 $this->conn = new mysqli($this->reg->conf->database['host'],
 $this->reg->conf->database['user'],
 $this->reg->conf->database['password'],
 $this->reg->conf->database['database']);
?>

$ this-> reg-> conf-> databaseには、ホスト、データベースなどのすべての値が含まれています。これは機能しますが、接続があります。

さて、var_dumpすると、次のような結果になります。

<?php var_dump($this->result); ?>

私はこれを手に入れます:

object(mysqli_result)[9]

public'current_field' => null

public'field_count' => null

public'lengths' => null

public'num_rows' => null

public'type' => null

ただし、前に述べたように、少なくとも3行が含まれている必要があるため、num_rowsは「3」であると予想されます。

ここで、var_dumpを実行すると、結果のnum_rowsは次のようになります。

<?php var_dump($this->result->num_rows); ?>

応答として「int3」を取得します。

結論:最初のvar_dumpではnullですが、さらに詳しく調べると3になります。したがって、3行を読み取ります。別の行(4番目)を追加すると、期待どおりに4が返されます。

私の質問は、var_dumpが正しく機能しないのはなぜですか?なぜ最初はnullと表示されますが、詳しく調べると価値があります。

事前のおかげで、私もエラーが発生しないので、これには本当に苦労しています。

4

1 に答える 1

5

オブジェクトは「遅延」で実装されます。つまり、実際に必要になるまで(つまり、結果オブジェクトから何かにアクセスするまで)、サーバーからデータを取得しません。

var_dumpプロパティゲッターをトリガーしないようであるため、として表示されnullます。

于 2012-07-01T22:02:02.357 に答える