MySQL Functions (PDO_MYSQL)

소개

PDO_MYSQL은 PHP에서 MySQL 데이터베이스로의 액세스를 가능하게 하는 PHP 데이터 개체(PDO) 인터페이스를 구현하는 드라이버입니다.

PDO_MYSQL은 기본적으로 에뮬레이트된 준비를 사용합니다.

MySQL 8

7.1.16 이전의 PHP 버전 또는 7.2.4 이전의 PHP 7.2를 실행할 때 MySQL 8 서버의 기본 비밀번호 플러그인을 mysql_native_password로 설정하십시오. 그렇지 않으면 caching_sha2_password를 사용하지 않는 경우에도 [caching_sha2_password] 클라이언트가 알 수 없는 서버 요청 인증 메서드와 유사한 오류가 표시됩니다.

이는 MySQL 8이 기본적으로 이전 PHP(mysqlnd) 릴리스에서 인식되지 않는 플러그인인 caching_sha2_password를 사용하기 때문입니다. 대신 my.cnf에서 default_authentication_plugin=mysql_native_password를 설정하여 변경하십시오. caching_sha2_password 플러그인은 향후 PHP 릴리스에서 지원될 예정입니다. 그동안 mysql_xdevapi 확장은 이를 지원합니다.

경고 주의: 일부 MySQL 테이블 유형(스토리지 엔진)은 트랜잭션을 지원하지 않습니다. 트랜잭션을 지원하지 않는 테이블 유형을 사용하여 트랜잭션 데이터베이스 코드를 작성할 때 MySQL은 트랜잭션이 성공적으로 시작된 것처럼 가장합니다. 또한 발행된 모든 DDL 쿼리는 보류 중인 트랜잭션을 암시적으로 커밋합니다.

메모: MySQL 드라이버는 PDOStatement::bindParam()을 통해 PDO::PARAM_INPUT_OUTPUT을 제대로 지원하지 않습니다. 이러한 매개변수를 사용할 수 있지만 업데이트되지 않습니다(즉, 실제 출력은 무시됨).


설치

일반적인 Unix 배포판에는 설치할 수 있는 PHP의 바이너리 버전이 포함됩니다. 이러한 바이너리 버전은 일반적으로 MySQL 확장을 지원하도록 구축되지만 확장 라이브러리 자체는 추가 패키지를 사용하여 설치해야 할 수도 있습니다. 가용성을 위해 선택한 배포판과 함께 제공되는 패키지 관리자를 확인하십시오.

예를 들어 Ubuntu에서 php5-mysql 패키지는 ext/mysql, ext/mysqli 및 PDO_MYSQL PHP 확장을 설치합니다. CentOS에서 php-mysql 패키지는 이 세 가지 PHP 확장도 설치합니다.

또는 이 확장을 직접 컴파일할 수 있습니다. 소스에서 PHP를 빌드하면 사용하려는 MySQL 확장과 각 확장에 대한 클라이언트 라이브러리 선택을 지정할 수 있습니다.

컴파일할 때 --with-pdo-mysql[=DIR]을 사용하여 PDO MySQL 확장을 설치합니다. 여기서 선택적 [=DIR]은 MySQL 기본 라이브러리입니다. Mysqlnd는 기본 라이브러리입니다. 라이브러리 선택에 대한 자세한 내용은 Choosing a MySQL library을 참조하십시오.

선택적으로 --with-mysql-sock[=DIR]은 PDO_MYSQL을 포함한 모든 MySQL 확장에 대한 MySQL 유닉스 소켓 포인터의 위치를 ​​설정합니다. 지정하지 않으면 기본 위치가 검색됩니다.

선택적으로 --with-zlib-dir[=DIR]은 libz 설치 접두사에 대한 경로를 설정하는 데 사용됩니다.

$ ./configure --with-pdo-mysql --with-mysql-sock=/var/mysql/mysql.sock
                

SSL 지원은 적절한 PDO_MySQL constants를 사용하여 활성화되며, 이는 » MySQL C API function mysql_ssl_set()을 호출하는 것과 동일합니다. 또한 연결이 이미 존재하기 때문에 SSL은 PDO::setAttribute로 활성화할 수 없습니다. » connecting to MySQL with SSL에 대한 MySQL 문서도 참조하세요.


미리 정의된 상수

아래 상수는 이 드라이버에 의해 정의되며 확장이 PHP로 컴파일되거나 런타임에 동적으로 로드된 경우에만 사용할 수 있습니다. 또한 이러한 드라이버별 상수는 이 드라이버를 사용하는 경우에만 사용해야 합니다. 다른 드라이버와 함께 드라이버별 속성을 사용하면 예기치 않은 동작이 발생할 수 있습니다. 코드가 여러 드라이버에 대해 실행될 수 있는 경우 PDO::getAttribute()를 사용하여 드라이버를 확인하기 위해 PDO::ATTR_DRIVER_NAME 속성을 얻을 수 있습니다.

PDO::MYSQL_ATTR_USE_BUFFERED_QUERY (int)
이 속성이 PDOStatement에서 true로 설정되면 MySQL 드라이버는 버퍼링된 버전의 MySQL API를 사용합니다. 이식 가능한 코드를 작성하는 경우 대신 PDOStatement::fetchAll()을 사용해야 합니다.

예제 #1 mysql에서 쿼리를 버퍼링하도록 강제하기

                      
<?php
if ($db->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql') {
    $stmt = $db->prepare('select * from foo',
        array(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true));
} else {
    die("my application only works with mysql; I should use \$stmt->fetchAll() instead");
}
?>
                      
                    
PDO::MYSQL_ATTR_LOCAL_INFILE (int)
LOAD LOCAL INFILE을 활성화합니다.

이 상수는 새 데이터베이스 핸들을 구성할 때 driver_options 배열에서만 사용할 수 있습니다.

PDO::MYSQL_ATTR_LOCAL_INFILE_DIRECTORY (string)
이 지정된 디렉토리에 있는 파일로 LOCAL DATA 로드를 제한할 수 있습니다.

이 상수는 새 데이터베이스 핸들을 구성할 때 driver_options 배열에서만 사용할 수 있습니다.

PDO::MYSQL_ATTR_INIT_COMMAND (string)
MySQL 서버에 연결할 때 실행할 명령입니다. 재접속 시 자동으로 재실행됩니다.

이 상수는 새 데이터베이스 핸들을 구성할 때 driver_options 배열에서만 사용할 수 있습니다.

PDO::MYSQL_ATTR_READ_DEFAULT_FILE (int)
my.cnf 대신 명명된 옵션 파일에서 옵션을 읽습니다. mysqlnd는 mysql 구성 파일을 읽지 않기 때문에 mysqlnd가 사용되는 경우 이 옵션을 사용할 수 없습니다.
PDO::MYSQL_ATTR_READ_DEFAULT_GROUP (int)
my.cnf 또는 MYSQL_READ_DEFAULT_FILE로 지정된 파일의 명명된 그룹에서 옵션을 읽습니다. mysqlnd는 mysql 구성 파일을 읽지 않기 때문에 mysqlnd가 사용되는 경우 이 옵션을 사용할 수 없습니다.
PDO::MYSQL_ATTR_MAX_BUFFER_SIZE (int)
최대 버퍼 크기. 기본값은 1MiB입니다. 이 상수는 mysqlnd에 대해 컴파일될 때 지원되지 않습니다.
PDO::MYSQL_ATTR_DIRECT_QUERY (int)
직접 쿼리를 수행하고 준비된 명령문을 사용하지 마십시오.
PDO::MYSQL_ATTR_FOUND_ROWS (int)
변경된 행의 수가 아니라 발견된(일치하는) 행의 수를 반환합니다.
PDO::MYSQL_ATTR_IGNORE_SPACE (int)
함수 이름 뒤에 공백을 허용하십시오. 모든 함수의 이름을 예약어로 만듭니다.
PDO::MYSQL_ATTR_COMPRESS (int)
네트워크 통신 압축을 활성화합니다.
PDO::MYSQL_ATTR_SSL_CA (int)
SSL 인증 기관에 대한 파일 경로입니다.
PDO::MYSQL_ATTR_SSL_CAPATH (int)
PEM 형식으로 저장된 신뢰할 수 있는 SSL CA 인증서가 포함된 디렉터리의 파일 경로입니다.
PDO::MYSQL_ATTR_SSL_CERT (int)
SSL 인증서에 대한 파일 경로입니다.
PDO::MYSQL_ATTR_SSL_CIPHER (int)
OpenSSL에서 이해할 수 있는 형식으로 SSL 암호화에 사용할 수 있는 하나 이상의 암호 목록입니다. 예: DHE-RSA-AES256-SHA:AES128-SHA
PDO::MYSQL_ATTR_SSL_KEY (int)
SSL 키에 대한 파일 경로입니다.
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT (int)
서버 SSL 인증서 확인을 비활성화하는 방법을 제공합니다.

이것은 PHP 7.0.18 및 PHP 7.1.4부터 존재합니다.

PDO::MYSQL_ATTR_MULTI_STATEMENTS (int)
false로 설정하면 PDO::prepare()PDO::query() 모두에서 다중 쿼리 실행을 비활성화합니다.

이 상수는 새 데이터베이스 핸들을 구성할 때 driver_options 배열에서만 사용할 수 있습니다.


런타임 구성

이러한 기능의 동작은 php.ini의 설정에 영향을 받습니다.

PDO_MYSQL 구성 옵션

Name Default Changeable
pdo_mysql.default_socket "/tmp/mysql.sock" PHP_INI_SYSTEM
pdo_mysql.debug NULL PHP_INI_SYSTEM

PHP_INI_* 모드에 대한 자세한 내용과 정의는 구성 설정을 설정할 수 있는 위치를 참조하세요.

다음은 구성 지시문에 대한 간단한 설명입니다.

pdo_mysql.default_socket string
Unix 도메인 소켓을 설정합니다. 이 값은 구성 시 도메인 소켓이 발견되면 컴파일 시 설정할 수 있습니다. 이 ini 설정은 Unix 전용입니다.
pdo_mysql.debug bool
PDO_MYSQL에 대한 디버깅을 활성화합니다. 이 설정은 PDO_MYSQL이 mysqlnd에 대해 컴파일되고 PDO 디버그 모드인 경우에만 사용할 수 있습니다.

목차