2012-08-28 7 views
1

문제점이 있습니다. 노력하고 있지만 정확한 해결책을 얻지 못하고 있습니다.데이터베이스에서 데이터를 가져 오는 중 오류 또는 경고를 catch하는 방법

데이터베이스에서 코드를 가져 오는 코드가 있습니다.

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 블록에 주어진 기본값으로 설정 링크를합니다.

그러나 내가 원하는 방식으로 작동하지 않습니다. 오류가 발생해도 오류가 발생하지만 $linkcatch에서 전달되지 않습니다. 대신 오류 메시지가 표시됩니다.

Blogic.php life is like --- >> 이것은 데이터베이스 항목을 가져 오는 파일입니다.

<?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' 블록에서'return '을 시도해야합니다. – 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 경고도 잡을 까? 나는 이것이 어떤 오류라도 잡을 것이라는 것을 안다. 그러나 어떤 경고가 오면 그것은 또한 블록을 잡을 것인가? –

+0

경고를 캐치하지 않습니다. 그냥 예외. 경고를위한 커스텀 에러 핸들러를 원한다면 ['set_error_handler()'] (http://php.net/manual/en/function.set-error-handler.php)를 확인하십시오. – Matt

0

$linktry/catch 논리 전에 정의되어 있습니까? 처음 시도하지 않으면.

$link은 제공된 코드로 try/catch 외부에서 액세스 할 수없는 것으로 보입니다.

매트가 나를 가장 잘 대답하지만, 가능한 한 그와 함께 가라.

관련 문제