2016-08-08 36 views
0

我懷疑是否準備好的語句應該在try/catch塊之內還是之外。在try/cach內部或外部準備好聲明?

(這是我的用戶級別的示例方法)

我應該這樣做嗎?

public function getEmail($id_user) { 
    $this->_sql = 'SELECT Email FROM '.TBL_USERS.' WHERE IdUser = :id_user'; 
    $stmt = $this->_db->prepare($this->_sql); 
    try { 
    $stmt->bindParam(':id_user', $id_user, PDO::PARAM_INT); 
    $stmt->execute(); 
    $row = $stmt->fetchObject(); 
    if (is_object($row)) { 
     return $row->Email; 
    } 
    return NULL; 
    } catch (PDOException $e) { 
    throw $e; 
    } 
} 

or this?

public function getEmail($id_user) { 
    $this->_sql = 'SELECT Email FROM '.TBL_USERS.' WHERE IdUser = :id_user'; 
    try { 
    $stmt = $this->_db->prepare($this->_sql); 
    $stmt->bindParam(':id_user', $id_user, PDO::PARAM_INT); 
    $stmt->execute(); 
    $row = $stmt->fetchObject(); 
    if (is_object($row)) { 
     return $row->Email; 
    } 
    return NULL; 
    } catch (PDOException $e) { 
    throw $e; 
    } 
} 
+1

總是在'try'裏面做準備。 SQL語法錯誤可以/將潛入。 –

+2

如果你不打算做任何有意義的事情,除非有例外,否則根本就不能理解它。重新拋出這樣的異常只會讓堆棧跟蹤更難以閱讀。 – Sammitch

回答

1

prepare()方法可能會拋出一個PDOException,因此您應該在try塊內部包含準備調用。 但是,在這兩個例子中,你只是重新拋出異常。除非你真的要處理catch塊內的異常,否則效果將是相同的。