2012-08-28 46 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与所提供的代码外部访问。

虽然马特打败了我最好的答案;随他去是完全可能的。

相关问题