mysqli::__construct

(PHP 5, PHP 7, PHP 8)

mysqli::__construct -- mysqli::connect -- mysqli_connect — MySQL 서버에 대한 새 연결 열기


설명

객체 지향 스타일

public mysqli::__construct(
    string $hostname = ini_get("mysqli.default_host"),
    string $username = ini_get("mysqli.default_user"),
    string $password = ini_get("mysqli.default_pw"),
    string $database = "",
    int $port = ini_get("mysqli.default_port"),
    string $socket = ini_get("mysqli.default_socket")
)
                
public mysqli::connect(
    string $hostname = ini_get("mysqli.default_host"),
    string $username = ini_get("mysqli.default_user"),
    string $password = ini_get("mysqli.default_pw"),
    string $database = "",
    int $port = ini_get("mysqli.default_port"),
    string $socket = ini_get("mysqli.default_socket")
): void
                

절차적 스타일

mysqli_connect(
    string $hostname = ini_get("mysqli.default_host"),
    string $username = ini_get("mysqli.default_user"),
    string $password = ini_get("mysqli.default_pw"),
    string $database = "",
    int $port = ini_get("mysqli.default_port"),
    string $socket = ini_get("mysqli.default_socket")
): mysqli|false
                

MySQL 서버에 대한 연결을 엽니다.


매개변수

hostname
호스트 이름 또는 IP 주소일 수 있습니다. null 값 또는 "localhost" 문자열을 이 매개변수에 전달할 때 로컬 호스트가 가정됩니다. 가능하면 TCP/IP 프로토콜 대신 파이프가 사용됩니다. 호스트 이름과 포트 번호가 함께 제공되는 경우 TCP/IP 프로토콜이 사용됩니다. localhost:3308.

p:로 호스트 앞에 추가 영구 연결을 엽니다. mysqli_change_user()는 연결 풀에서 열린 연결에서 자동으로 호출됩니다.

username
MySQL 사용자 이름.
password
제공되지 않거나 null인 경우 MySQL 서버는 암호만 없는 사용자 레코드에 대해 사용자 인증을 시도합니다. 이를 통해 하나의 사용자 이름을 다른 권한으로 사용할 수 있습니다(비밀번호 제공 여부에 따라 다름).
database
제공된 경우 쿼리를 수행할 때 사용할 기본 데이터베이스를 지정합니다.
port
MySQL 서버에 연결을 시도할 포트 번호를 지정합니다.
socket
사용해야 하는 소켓 또는 명명된 파이프를 지정합니다.

메모: socket 매개변수를 지정하면 MySQL 서버에 연결할 때 사용할 연결 유형이 명시적으로 결정되지 않습니다. MySQL 데이터베이스에 연결하는 방법은 hostname 매개변수에 의해 결정됩니다.


반환 값

mysqli::__construct()는 성공 여부에 관계없이 항상 MySQL 서버에 대한 연결을 나타내는 객체를 반환합니다.

mysqli_connect()는 MySQL 서버에 대한 연결을 나타내는 객체를 반환하거나 실패 시 false를 반환합니다.

mysqli_connect()는 성공하면 null을, 실패하면 false를 반환합니다.


오류/예외

MYSQLI_REPORT_STRICT가 활성화되고 요청된 데이터베이스에 대한 연결 시도가 실패하면 mysqli_sql_exception이 발생합니다.


Examples

예제 #1 mysqli::__construct() 예제

객체 지향 스타일

                  
<?php

/* You should enable error reporting for mysqli before attempting to make a connection */
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');

/* Set the desired charset after establishing a connection */
$mysqli->set_charset('utf8mb4');

printf("Success... %s\n", $mysqli->host_info);
                  
                

절차적 스타일

                  
<?php

/* You should enable error reporting for mysqli before attempting to make a connection */
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

$mysqli = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');

/* Set the desired charset after establishing a connection */
mysqli_set_charset($mysqli, 'utf8mb4');

printf("Success... %s\n", mysqli_get_host_info($mysqli));
                  
                

위의 예는 다음과 유사한 결과를 출력합니다.

Success... localhost via TCP/IP
                

예제 #2 mysqli 클래스 확장

                  
<?php

class FooMysqli extends mysqli {
    public function __construct($host, $user, $pass, $db, $port, $socket, $charset) {
        mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
        parent::__construct($host, $user, $pass, $db, $port, $socket);
        $this->set_charset($charset);
    }
}

$db = new FooMysqli('localhost', 'my_user', 'my_password', 'my_db', 3306, null, 'utf8mb4');
                  
                

예제 #3 수동 오류 처리

오류 보고가 비활성화된 경우 개발자는 오류 확인 및 처리에 대한 책임이 있습니다.

객체 지향 스타일

                  
<?php

error_reporting(0);
mysqli_report(MYSQLI_REPORT_OFF);
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');
if ($mysqli->connect_errno) {
    throw new RuntimeException('mysqli connection error: ' . $mysqli->connect_error);
}

/* Set the desired charset after establishing a connection */
$mysqli->set_charset('utf8mb4');
if ($mysqli->errno) {
    throw new RuntimeException('mysqli error: ' . $mysqli->error);
}
                  
                

절차적 스타일

                  
<?php

error_reporting(0);
mysqli_report(MYSQLI_REPORT_OFF);
$mysqli = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');
if (mysqli_connect_errno()) {
    throw new RuntimeException('mysqli connection error: ' . mysqli_connect_error());
}

/* Set the desired charset after establishing a connection */
mysqli_set_charset($mysqli, 'utf8mb4');
if (mysqli_errno($mysqli)) {
    throw new RuntimeException('mysqli error: ' . mysqli_error($mysqli));
}
                  
                

노트

메모:

MySQLnd는 항상 서버 기본 charset을 가정합니다. 이 문자 집합은 mysqlnd가 사용할 연결 핸드 셰이크/인증 중에 전송됩니다.

Libmysqlclient는 my.cnf에 설정된 기본 charset을 사용하거나 mysqli_real_connect()를 호출하기 전에 mysqli_init() 이후에 mysqli_options()를 명시적으로 호출하여 사용합니다.

메모: 객체 지향 스타일만 해당: 연결이 실패하면 객체가 계속 반환됩니다. 연결 실패 여부를 확인하려면 앞의 예제와 같이 mysqli_connect_error() 함수 또는 mysqli->connect_error 속성을 사용하십시오.

메모: 연결 시간 초과와 같은 옵션을 설정해야 하는 경우 mysqli_real_connect()를 대신 사용해야 합니다.

메모: 매개변수 없이 생성자를 호출하는 것은 mysqli_init()를 호출하는 것과 동일합니다.

메모: "Can't create TCP/IP socket (10106)" 오류는 일반적으로 variables_order configure 지시문이 문자 E를 포함하지 않는다는 것을 의미합니다. Windows에서 환경이 복사되지 않으면 SYSTEMROOT 환경 변수를 사용할 수 없으며 PHP는 Winsock을 로드하는 데 문제가 있습니다.


기타