2016-07-26 45 views
-2

我一直在使用準備好的語句很好,現在沒有問題,但今天當我試圖從準備好的語句調用MySQL函數我得到以下內容:PHP準備好的聲明失敗時調用MySQL函數

Fatal error: Call to a member function fetch_array() on boolean in DB.php on line 336 

這是我使用的代碼並沒有什麼不同,我平時SELECTUPDATEDELETE querys,我也沒有任何問題調用程序,我的程序授予均未返回任何值。

$sql = "SELECT FN_MAINTAIN_ASSET(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) AS assetId;"; 

try { 
    $conn = $this->open(); 

    $stmt = $conn->prepare($sql); 
    if($stmt === false) { 
     trigger_error(sprintf($txt["error_sql"], $conn->error), E_USER_ERROR); 
    } 

    $stmt->bind_param('iiiisssbbiiiis', $modify, $type, $category, $year, $title, $description, $imageFilename, $imageMain, $imageThumbnail, $membersOnlyView, $privateView, $status, $memberId, $createdIp); 
    $stmt->execute(); 

    $rs = $stmt->get_result(); 
    $result = $rs->fetch_array(MYSQL_ASSOC); // Line 336 
    $rs->free(); 

    $stmt->close(); 
    $this->close($conn); 
} catch (Exception $e) { 
    $logObj->error($e->getMessage()); 
} 

$rs只是線336,從$stmt沒有錯誤消息之前是空的。

如果有人有任何建議或想法,非常感謝。

+0

在執行下一條指令之前檢查'$ rs'的值 – Hackerman

+1

您是否明確啓用了異常?如果沒有,那麼try/catch就沒用了,因爲mysqi/pdo默認通過返回boolean false來失敗,而不是拋出異常。要麼打開異常,要麼開始顯式檢查返回值。 –

回答

1

從手冊get_result:

返回值

返回成功的SELECT查詢結果集,或FALSE其他 DML查詢或失敗。可以使用mysqli_errno()函數來區分這兩種類型的故障。

如果您的語句返回布爾值,則失敗。檢查來自$stmt->error的錯誤消息,並更正錯誤。