2012-07-03 149 views
1

我是新來的PDO,我想從一開始就這樣做 - 我要在一個網站上替換我的舊mysql_函數。PDO連接嘗試捕獲包括

有我這樣做是正確?:

我應該把連接代碼在一個try/catch並將其保存到一個文件,並將其包含在頁面的頂部。然後把這些查詢放在try/catch中。

或者:

我應該把連接代碼在一個文件中,並將其包括在查詢上面的try/catch語句的頂部?

VER1:

include('pdo.php'); // try/catch in file 

try { 

    $stmt = $conn->prepare('SELECT * FROM myTable WHERE id = :id'); 
    $stmt->execute(array('id' => $id)); 

    while($row = $stmt->fetch()) { 
     print_r($row); 
    } 
} catch(PDOException $e) { 
    echo 'ERROR: ' . $e->getMessage(); 
} 

VER2:

try { 
    include('pdo.php'); // no try/catch in file 

    $stmt = $conn->prepare('SELECT * FROM myTable WHERE id = :id'); 
    $stmt->execute(array('id' => $id)); 

    while($row = $stmt->fetch()) { 
     print_r($row); 
    } 
} catch(PDOException $e) { 
    echo 'ERROR: ' . $e->getMessage(); 
} 

或者我應該把兩地的try/catch?

回答

1

你應該這樣做既甚至更多:

  • 設置顯示一條消息給用戶,並停止PHP錯誤處理程序(見set_error_handler
  • 當您啓動了連接,將一個try /如果發現異常,趕上並拋出一個錯誤。我想你的網站不會運行沒有數據庫連接。
  • 做一個try/catch在你的查詢,以從錯誤中恢復正常(如果你能)
+0

好,但它是安全的(意思是 - 錯誤不會顯示用戶名和密碼),只是使用try /抓住連接?查詢錯誤拋出的異常不可能顯示連接信息? – user1121487

+0

我從來沒有看到任何錯誤顯示密碼,有時在調試模式下的密碼。最好的事情是測試(在生產時使用'error_reporting(0)') –

+0

好的。那麼連接最好?假設你有一個有多個方法的類,每個方法都有一個sql查詢。最好是在頁面頂部包含$ username和$ password,然後在每個try/catch內部,開始: $ conn = new PDO(「mysql:host = $ host; dbname = $ dbname」, $ username,$ password); $ conn-> setAttribute(PDO :: ATTR_ERRMODE,PDO :: ERRMODE_EXCEPTION); 因此,您可以啓動連接,並在每種方法中將其設置爲null。 – user1121487