강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của nak5129116
nak5129116

câu hỏi đã được viết

Lập trình PHP 7+

52 - Khởi động

DB_CONNECTION 부분 질문

Viết

·

262

0

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

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

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

Câu trả lời 1

0

pronist님의 프로필 이미지
pronist
Người chia sẻ kiến thức

안녕하세요!

연결에 성공한 경우 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
Người đặt câu hỏi

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

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

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

pronist님의 프로필 이미지
pronist
Người chia sẻ kiến thức

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

 

Hình ảnh hồ sơ của nak5129116
nak5129116

câu hỏi đã được viết

Đặt câu hỏi