1

こんにちは、私は現在、mysqli カプセル化クラスのコードをデバッグしようとしています。ここで説明されている問題に遭遇しましたが、これが最新の反復であり、(動作していないようです) いくつかの解決策を試しました:

$this->result = new stdClass();
foreach($res = $this->conn->query($sql) as $key => $value) {
    $this->result->$key = $value;
}

何らかの方法で結果を保存する方法や、ポインターと $result->free_result(); を使用してシステムを作成する方法を誰かが知っている場合。いつでもお電話いただければ幸いです。私は少し困惑しており、時間が非常に短いです。

前もって感謝します!

EDIT 現在、私の元の実装は機能しているようで、テストを通じてこれが当てはまるかどうかはわかりません。現在、mysqli->query を呼び出して結果を $this->result に保存するカスタム $this->query() 関数がありますが、状況によっては $this->result が設定されていないようです。私が持っているものをテスト/デバッグし続け、それが再び起こるかどうかを確認します. 答えてくれた人に感謝します:)

EDIT 2かなりの試行錯誤を経て、奇妙な動作をしているSQLクエリに戻って問題を追跡しました。mysqli::query() からの結果のオブジェクトを問題なしに保存することはできないようです (?)。

4

2 に答える 2

1

あなたのコード例は行をフェッチしていません。それを行う必要があり、オプションの1つはオブジェクトとしてフェッチすることです:

$this->rows = array();

$res = $this->conn->query($sql);

while ($obj = $res->fetch_object()) {
    $this->rows[] = $obj;
}

echo $this->rows[0]->id; // assuming you have a column named id
于 2012-05-31T20:14:29.950 に答える
0

PHP クラスで事前にプロパティを宣言する必要はありません。動的に割り当てるだけです:

foreach($res = $this->conn->query($sql) as $key => $value) {
    $this->result->$key = $value;
}

これにより、$key の値と同じ名前のプロパティが作成されます。$key の名前にスペースが含まれていると、通常の方法ではプロパティにアクセスできないことに注意してください。例えば:

$key = 'Hello World';
$this->result->$key = 'Hi!';
// now this won't work even though Hello World is the property name:
echo $this->result->Hello World;
// instead do:
echo $this->result->$key;
// or access it like an associative array
echo $this->result['Hello World'];
于 2012-05-31T19:23:55.460 に答える