2016-07-26 43 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的错误消息,并更正错误。