2013-01-17 100 views
0

我有以下代碼:爲什麼不能通過foreach或get_object_vars訪問PHP mysqli_stmt屬性?

//preparing statement, executing and so on is omitted... 
//$this->cur_query_stmt is object returned by prepare() function 
var_dump($this->cur_query_stmt); 
foreach($this->cur_query_stmt as $k=>$v){ 
    var_dump($k); 
    var_dump($v); 
    } 

這段代碼的輸出:

object(mysqli_stmt)#6 (9) { 
    ["affected_rows"]=> 
    int(1) 
    ["insert_id"]=> 
    int(7) 
    ["num_rows"]=> 
    int(0) 
    ["param_count"]=> 
    int(1) 
    ["field_count"]=> 
    int(0) 
    ["errno"]=> 
    int(0) 
    ["error"]=> 
    string(0) "" 
    ["sqlstate"]=> 
    string(5) "00000" 
    ["id"]=> 
    int(2) 
} 
string(13) "affected_rows" 
NULL 
string(9) "insert_id" 
NULL 
string(8) "num_rows" 
NULL 
string(11) "param_count" 
NULL 
string(11) "field_count" 
NULL 
string(5) "errno" 
NULL 
string(5) "error" 
NULL 
string(8) "sqlstate" 
NULL 
string(2) "id" 
NULL 

任何人都可以解釋爲什麼所有的值都爲NULL返回?

我可以通過調用$ this-> cur_query_stmt - > $ this-> affected_rows來得到它們,但是當試圖讓它們在foreach或get_object_vars函數中時,我會得到NULL。我很困惑,請幫忙!

+0

只是好奇,爲什麼你想他們在一個循環? –

+0

其實我想通過get_object_vars函數獲取它們,但是由於它給了我空值,我試圖讓它們處於循環中。我將它存儲爲通過執行查詢的函數返回 –

回答

0

mysqli_stmt沒有_constructor()來生成它的屬性值。要獲得「affected_rows」,您必須調用$ this-> cur_query_stmt - > $ this-> affected_rows。

+0

該代碼在..prepare($ query)和..execute()之後執行,因此它沒有連接到_constructor()中不生成值。此外,我做了var_dump($ this-> cur_query_stmt),它的輸出顯示了屬性實際上是設置的。 –

相關問題