• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

DB_CONNECTION 부분 질문

22.08.16 23:03 작성 조회수 128

0

  • - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
    안녕하세요, 선생님.

    $GLOBALS['DB_CONNECTION'] = mysqli_connect(
        'localhost',
        'root',
        'qhscjs1!2@',
        'blog'
    ) || exit;

    위와 같이 할 경우 접속에 성공했다면 DB_CONNECTION에 true가 입력 되는거 아닌지요?
  • - 먼저 유사한 질문이 있었는지 검색해보세요.
  • - 서로 예의를 지키며 존중하는 문화를 만들어가요.
  • - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

답변 1

답변을 작성해보세요.

0

안녕하세요!

연결에 성공한 경우 true 가 아니라 mysqli 인스턴스가 할당됩니다. 추후에 쿼리를 쏠 때 사용된답니다. 예를 들면 다음과 같이 말이죠! 아직 객체지향은 배우시지 않으셨을 테지만, 연결이 성공된다면 별 다른 문제없이 쿼리가 처리 될 것입니다.

$conn = mysqli_connect(
    'homestead.test',
    'homestead',
    'secret',
    'homestead'
);

assert( $conn instanceof mysqli );

$r = mysqli_query($conn, 'SELECT * FROM migrations');

while ($obj = mysqli_fetch_object($r)) {
    assert( $obj instanceof stdClass );
}

그러나 연결이든 어떤 문제가 발생하면 mysqli_sql_exception 이 발생합니다. try ~ catch 로 따라서 잡을 수 있습니다. 이 내용은 그다지 중요하지 않으므로 지금 이해되지 않아도 괜찮습니다.

try {
    $conn = mysqli_connect(
        ...
    );
} catch (mysqli_sql_exception $e) {
    error_log( $e->getMessage() );
}
nak512님의 프로필

nak512

질문자

2022.08.17

답변 감사드립니다.
위의 코드로 진행하였을 때 저 같은 경우에는 계속해서 GLOBAL['DB_CONNECTION'] 부분에 true 값이 들어가 있더라구요. mysqli 인스턴스가 없어서 이후 동작을 수행하지 못하고 에러를 발생시켰습니다.

문제가 의심되는 부분이 위의 코드 부분이여서 mysqli_connect 부분과 exit를 분리(따로 처리) 하니 정상적으로 mysqli 인스턴스가 GLOBAL['DB_CONNECTION'] 부분에 할당되었습니다. php 8.x 버전을 사용하고 있어서 그런가 해서 php 문서를 찾아보니 버전과 상관없이 mysqli_connect를 사용해서 연결에 성공하면 mysqli 인스턴스가 할당되고 실패하면 false가 떨어진다고 되어 있더라구요.

아직까지 원인을 모르겠습니다. 혹시 짐작 가시는 부분이 있으실까요?

true 값이 할당되는 경우라 ... 그 이유는 아마 || 연산자 때문일 것입니다. 연결에 성공해서 mysqli_connect() 가 mysqli 인스턴스를 반환하면 논리 연산자의 경우 true 로 취급됩니다.

이를테면 다음과 같이 비어있지 않은 문자열은 true , 비어있으면 false 로 취급합니다. 그렇기 때문에 true 로 처리 된 것입니다.

var_dump( 'Hello, world' || null ); // true
var_dump( '' || null ); // false

이 처리는 사실 언어마다 다릅니다. 이를테면 자바스크립트의 경우 똑같은 코드임에도 결과값이 다릅니다. 이러한 방식을 가르키는 이름이 있었던 것 같은데.. 저도 일단 까먹었지만 언어마다 다르다는 점을 주의해주세요.

console.log( 'Hello, world' || null ); // Hello, world
console.log( '' || null ); // null