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을 로드하는 데 문제가 있습니다.
기타
- mysqli_real_connect() - mysql 서버에 대한 연결을 엽니다.
- mysqli_options() - 옵션 설정
- mysqli_connect_errno() - 마지막 연결 호출에서 오류 코드를 반환합니다.
- mysqli_connect_error() - 마지막 연결 오류에 대한 설명을 반환합니다.
- mysqli_close() - 이전에 열린 데이터베이스 연결을 닫습니다.