2011-06-16 96 views
0

我是MySQLi擴展的新手,並且遇到了問題。每當查詢結束執行時,我知道你應該釋放結果。以下是我爲運行簡單查詢而構建的類的一部分。有人能告訴我我錯了哪裏?正確輸入時,查詢成功運行。這只是我的頁面不會重新加載喜歡它,應該但它給了我這些錯誤......MySQLi PHP擴展問題

Fatal error: Call to a member function free() on a non-object in <file> on <line> 

...而這個錯誤...

Fatal error: Call to a member function close() on a non-object in <file> on <line> 

這裏的一個簡化版本我的代碼:

... More code ... 

public function query($query) { 
    try { 
    if ($result = $this->connection->query($query, MYSQLI_USE_RESULT)) { 
     $result->free(); //Problems here 
     $result->close(); //Problems here 

     return $result; 
    } else { 
     $result->free(); //Problems here 
     $result->close(); //Problems here 

     throw new Exception("The query was invalid"); 
    } 
    } catch (Exception $e) { 
    die($e->getMessage()); 
    } 
} 

... More code ... 

我想避免這樣做程序的方式,因爲這是一個面向對象的應用程序。

謝謝你的時間。

PS:上面的代碼示例遵循類似的模式,以與第一實施頁:http://www.php.net/manual/en/mysqli.query.php

回答

5

如果我按照你的鏈接到手冊中,有關於返回值

提到的某些東西失敗時返回FALSE。對於成功的SELECT,SHOW,DESCRIBE或EXPLAIN查詢,mysqli_query()將返回一個結果對象。對於其他成功的查詢,mysqli_query()將返回TRUE。

尤其是你不處理這兩種情況true,更重要的false

if ($result = $this->connection->query($query, MYSQLI_USE_RESULT)) { 
    $result->free(); // Probably call "free()" on true 
    $result->close(); 

    return $result; 
} else { // <-- false, null, 0 or "" 
    $result->free(); // Probably call "free()" on false 
    $result->close(); 

    throw new Exception("The query was invalid"); 
} 

我不知道,什麼$query你的情況,但query()只會如果返回結果,有一個(SELECT-查詢)。

+0

我執行的測試查詢是一個INSERT查詢。這可能是我的問題? – 2011-06-16 19:52:52

+1

當然。因爲我建議只有'SELECT'查詢有結果。其他一切只返回「成功」('true')或「失敗」('false')。更糟糕的是,如果結果評估爲'false'('else'分支),但是您仍然對其調用'free()',那麼測試會更糟糕。 – KingCrunch 2011-06-16 19:55:31

+0

看過你的描述後,是的,那看起來像你擊中了頭部的指甲。話雖如此,有沒有辦法我可以看到這是否是一個對象? – 2011-06-16 19:55:47