2012-08-28 55 views
1

我遇到問題。我正在嘗試,但我沒有得到確切的解決方案。如何在從數據庫獲取數據時捕獲錯誤或警告

我有代碼從數據庫中拿東西。

try { 
    require_once('blogic.php'); 
    $obj = new blogic(); 
    $re = $obj->select("SELECT link FROM eff ORDER BY RAND() LIMIT 1"); 
    $l = mysql_fetch_row($re); 
    $link = $l[0]; 
} catch (Exception $e) { 
    $link = "http://www.xyz.com/friendsin2013/"; 
} 

上面的代碼工作正常,但如果(無論出於何種原因)任何問題出現,同時從數據庫中獲取數據,我想的聯繫,在catch塊給被拖欠。

然而,它並不按照我希望的方式工作。它在沒有錯誤時有效,但是,當我遇到錯誤時,$link未從catch傳遞。我只是得到錯誤信息。

Blogic.php生活就像--- >>這是一個獲取數據庫條目的文件。

<?php 

include('s.php'); 

class blogic { 

    function connect() { 
     $link = mysql_connect(SERVER, USER, PASSWORD); 
     if (!$link) { 
      die('Could not connect: ' . mysql_error()); 
      return false; 
     } else { 
      return true; 
     } 
    } 

    function select_database() { 
     $db = mysql_select_db(DATABASE); 
     if (!$db) { 
      die('Could not connect: ' . mysql_error()); 
      return false; 
     } else { 
      return true; 
     } 
    } 

    function select($str) { 
     self::connect(); 
     self::select_database(); 

     $res = mysql_query($str); 
     return $res; 
    } 
} 
?> 

s.php - >>

+1

它可能無助於回答你的問題,但你應該停止使用'mysql_ *'函數。他們正在被棄用。請使用[PDO](http://php.net/manual/en/book.pdo.php)(自PHP 5.1起支持)或[mysqli](http://php.net/manual/en/book)。 mysqli.php)(自PHP 4.1起支持)。如果您不確定要使用哪一個,請閱讀本文(http://www.deprecatedphp.com/mysql_/)。 – Matt

+0

我不確定'try-catch'語句是如何工作的。 '$ link'可能超出了範圍,所以你應該嘗試''返回''catch'塊。 – Matt

+2

@Matt鏈接到您自己的網站? Em .. – treng

回答

0

它寫成一個函數,然後調用它;同時在trycatch塊返回$link

require_once('blogic.php'); 

function getLink() { 
    try { 
     $obj = new blogic(); 
     $re=$obj->select("SELECT link FROM eff ORDER BY RAND() LIMIT 1"); 
     $l=mysql_fetch_row($re); 
     return $l[0]; 
    } 
    catch(Exception $e) { 
     return "http://www.xyz.com/friendsin2013/"; 
    } 
} 

$link = getLink(); 
+0

謝謝,它是否也會捕獲PHP警告?我知道這會發生任何錯誤,但如果有任何警告,那麼它也會進入catch塊? –

+0

這不會引起警告;只是'例外'。如果你想要一個用於警告的自定義錯誤處理程序,請查看['set_error_handler()'](http://php.net/manual/en/function.set-error-handler.php)。 – Matt

0

$linktry/catch邏輯之前定義的?如果不是先嚐試。

$link看起來不是try/catch與所提供的代碼外部訪問。

雖然馬特打敗了我最好的答案;隨他去是完全可能的。

相關問題