2012-05-31 89 views
1

嘿傢伙我目前正在嘗試調試一些mysqli封裝類的代碼。香港專業教育學院碰到一個問題描述here試圖與這個是最新的迭代和一些解決方案(似乎不工作):如何保存mysqli_result對象的內容?

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

如果有人知道的方式來存儲結果以某種方式或創建一個系統指針和$ result-> free_result();在某個時候帶上電話會很感激。我有點難倒,時間很短。

在此先感謝!

編輯截至目前我的原始實施似乎工作不知道如果這將通過測試保持真實。目前我有一個自定義的$ this-> query()函數調用mysqli-> query並將結果存儲在$ this-> result中,但是在某些情況下,似乎$ this-> result變爲未設置。要繼續測試/調試我擁有的內容,看看它是否再次發生。感謝那些回答:)

編輯2通過公平的比特試驗和錯誤我追溯到我回到SQL查詢行爲奇怪的問題。似乎不可能從mysqli :: query()存儲沒有問題(?)的結果對象。

+0

,如果你希望將結果存儲在對象,你需要創建一個變量類各個領域的queering然後將其存儲在對象 –

+1

我不認爲這是因爲錯字而失敗嗎? kek => $ key – ben

+0

'$ this-> result-> kek'應該是'$ this-> result - > $ key'? –

回答

1

您的示例編碼不提取行。你需要做到這一點,其中一個選項是fetch as objects

$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 
+0

如果我的代碼可能會返回到錯誤的生病我試試這個謝謝:) –

0

您不必提前在PHP類中聲明屬性。只要動態分配的:

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

這將創建一個具有相同的名稱,$鍵的值的屬性。請記住,如果$ 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']; 
+0

試過了,它似乎沒有工作,我再試一次,看看我所看到的一切,看看是否有其他的東西搞亂了它。另外我更喜歡爲了清晰而聲明變量非動態樣式(我的背景主要是C/C++)如果我可以在5秒內以非動態方式聲明某些東西,我通常會:) –

+2

不能使用stdClass類型的對象作爲數組。相反:'echo $ this-> result - > {'Hello World'};'無論如何,提前創建具有所需公共屬性的特定類(或者使用getters和setter)可能會更好。 – webbiedave

+0

我同意聲明變量是首選。爲了清楚起見,我總是聲明它們,但是如果你從一個結果集中拉出來,而你並不總是知道列名,那麼這會有所幫助。 – davidethell