2013-08-21 3 views
-2

I가 기능 :mysqli 다이()와 인스턴스를 반환하지 않습니다

function dbConnect($usertype, $connectionType = 'mysqli') { 

    // some code hare 

    return new mysqli($host, $user, $pwd, $db) or die ('Cannot open database'); 
} 

을하지만이하려고하면

$conn = dbConnect('read'); 
$result = $conn->query('SELECT * FROM images'); 

기능이 아무것도 반환 dosn't과 말 :

Fatal error: Call to a member function query() on a non-object in C:\xampp\htdocs\phpsols\mysql\mysqli.php on line 10

하지만이 방법으로 작동합니다 (die() 제외)

return new mysqli($host, $user, $pwd, $db); 

답변

5

[..] or die() 구문은 return 문과 함께 재미없는 동작을 만듭니다. 모든 것은 부울 식으로 해석됩니다.

new mysqli이 결코 false가 아니기 때문에 "die"가 처리되지 않으므로 새로 작성한 mysqli 대신 true이 반환됩니다. 당신은 여전히 ​​or die()를 사용하려는 경우,이 작업을 수행

:

$result = new mysqli($host, $user, $pwd, $db) ; 
if (!$result) die ("Can't open database."); 
return $result; 
+1

'새로운 mysqli 결코 연결이 실패 할 경우 어떤 일이 발생 FALSE '되지 않습니다? – DevZer0

+0

당신은 여전히 ​​새로운 mysqli 인스턴스를 얻는다. 생성자는 항상 객체를 반환합니다. – ciruvan

+0

. 그리고 지금 당신은 올바른 결론에서 한 발짝 내딛었습니다 –

-2

를 제외하고이 재미있는 한 줄 문제에서 오류 처리에 대한 당신의 생각은 모두 잘못된 것입니다. 슬프게도 다른 답변에도 복사하여 붙여 넣었습니다.

여기 솔직히 올바른 코드

$mysqli = new mysqli($host, $user, $pwd, $db); 
if (mysqli_connect_errno()) 
{ 
    throw new Exception(mysqli_connect_errno()." ".mysqli_connect_error()); 
} 
return $mysqli; 

이며,이 die ('something'); 것은 PHP의 어린 시절 질병이다. 조금 자라야 할 때.

+1

PHP는 그런 질병에 시달리고 있습니다. 자라려면 PHP 사용을 중단하고 Java로 들어가십시오. – ciruvan

+0

지팡이가 아니라 마법사입니다. PHP에 도움이되지 않는 사람은 자바에서도 많은 돈을 벌지 않을 것입니다. –

+0

일반적인 것 당신은 LOL을 downvoted되었습니다. :) – DevZer0

1

이 작업을 시도 할 수 있습니다 :

function dbConnect($usertype, $connectionType = 'mysqli') { 

    // some code hare 
    try { 
     return new mysqli($host, $user, $pwd, $db); 
    } catch(Exception $e) { 
     die ('Cannot open database'); 
    } 
} 
+0

직접 해보았습니까? –

+0

이 코드의 문제점은 무엇입니까? –

+0

그것은 가상의 것입니다. 당신은 단지 그것을 진짜로 사용하지 않았지만 당신의 머리에서 바로 벗어났습니다. –