PHP 매뉴얼
이전 |  | 다음

# LXIV. MySQL 함수

# 소개

이 함수들은 MySQL 데이터베이스 서버에 접근할 수 있도록 합니다. MySQL에 대한 정보는 http://www.mysql.com/에서 확인할 수 있습니다.

MySQL 문서는 http://dev.mysql.com/doc/에서 볼 수 있습니다.

# 요구 사항

이 함수들을 사용하려면, PHP가 MySQL을 지원하도록 컴파일해야 합니다.

# 설치

설정 옵션 `--with-mysql[=DIR]`을 사용하여 `PHP`가 MySQL 데이터베이스 접근을 활성화합니다.

PHP 4에서는, 옵션 `--with-mysql`은 기본값으로 활성화되어 있습니다. 이 기본 행동을 비활성화하기 위해서, 설정 옵션 `--without-mysql`을 사용할 수 있습니다. 또한 PHP 4에서는, MySQL 설치 DIR 경로를 지정하지 않고 MySQL을 활성화하면, `PHP`는 번들된 MySQL 클라이언트 라이브러리를 사용합니다. 윈도우즈에서는, DLL 없이, 단순히 PHP 4에 포함되어 있습니다. MySQL을 사용하는 다른 어플리케이션(예를들면, auth-mysql)을 사용하는 유저는 번들된 라이브러리를 사용하지 말고, 다음 방법으 MySQL의 설치 디렉토리 경로를 지정해야 합니다: `--with-mysql=/path/to/mysql`. 이는 `PHP`가 MySQL에 의해 설치한 클라이언트 라이브러리를 사용하도록 강제해서, 혼동을 피하게 합니다.

PHP 5에서는, MySQL은 더이상 기본값으로 활성화되어있지 않고, MySQL 라이브러리도 PHP에 번들되어 있지 않습니다. 자세한 이유에 대해서는 FAQ를 읽어보십시오.

MySQL 확장은 MySQL 4.1.0 이상의 모든 기능을 지원하지 않습니다. 대신, MySQLi를 사용하십시오.

mysqli 확장과 함께 mysql 확장을 설치하려 할 때는, 혼동을 피하기 위해 같은 클라이언트 라이브러리를 사용해야 합니다.

주의
레코드 확장과 함께 이 확장을 로드할 때, `PHP`의 충돌과 시작 문제가 발생할 수 있습니다. 자세한 정보는 레코드 확장을 참고하십시오.

> 참고: latin(기본값) 외의 문자셋이 필요하면, 문자셋 지원으로 컴파일한 외부(번들이 아닌) libmysql을 설치해야 합니다.

# 런타임 설정

이 함수의 작동은 `php.ini` 설정에 영향을 받습니다.

표 1. MySQL 설정 옵션

이름 | 기본값 | 변경가능성
--- | --- | ---
mysql.allow_persistent | "On" | PHP_INI_SYSTEM
mysql.max_persistent | "-1" | PHP_INI_SYSTEM
mysql.max_links | "-1" | PHP_INI_SYSTEM
mysql.default_port | NULL | PHP_INI_ALL
mysql.default_socket | NULL | PHP_INI_ALL
mysql.default_host | NULL | PHP_INI_ALL
mysql.default_user | NULL | PHP_INI_ALL
mysql.default_password | NULL | PHP_INI_ALL
mysql.connect_timeout | "0" | PHP_INI_SYSTEM

PHP_INI_* 상수에 대한 자세한 내용 및 정의는 ini_set()을 참고하십시오

위 설정 지시어에 대한 간단한 설명입니다.

`mysql.allow_persistent` boolean

  MySQL에 지속 접속의 허용 여부.

`mysql.max_persistent` integer

  프로세스 당 MySQL 지속 접속의 최대수.

`mysql.max_links` integer

  지속 접속을 포함하여, 프로세스 당 MySQL 접속의 최대수.

`mysql.default_port` string

  다른 포트를 지정하지 않았을 때, 데이터베이스 서버 접속에 사용하는 기본 TCP 포트. 기본값이 설정되지 않으면, `MYSQL_TCP_PORT` 환경 변수, `/etc/services`의 `mysql_tcp`, 컴파일 시의 `MYSQL_PORT` 상수를 순차적으로 확인합니다. Win32에서는 `MYSQL_PORT` 상수만을 사용합니다.

`mysql.default_socket` string

  다른 소켓 이름을 지정하지 않았을 때, 로컬 데이터베이스 서버 접속에 사용하는 기본 소켓 이름.

`mysql.default_host` string

  다른 호스트를 지정하지 않았을 때, 데이터베이스 서버에 접속할 때 사용하는 기본 서버 호스트. 안전 모드에서는 적용하지 않습니다.

`mysql.default_user` string

  다른 이름을 지정하지 않았을 때, 데이터베이스 서버 접속에 사용하는 기본 유저 이름. 안전 모드에서는 적용하지 않습니다.

`mysql.default_password` string

  다른 패스워드를 지정하지 않았을 때, 데이터베이스 서버 접속에 사용하는 기본 패스워드. 안전 모드에서는 적용하지 않습니다.

`mysql.connect_timeout` integer

  초로 나타낸 접속 시간 초과. 리눅스에서는 이 시간 초과를 서버로부터 첫번째 응답이 오기를 기다리는 데에도 사용합니다.

# 리소스 종류

MySQL 모듈에서 사용하는 두가지 자원형이 존재합니다. 첫번째는 데이터베이스 접속을 위한 연결 확인자, 두번째는 쿼리의 결과를 가지는 자원입니다.

# 상수 정의

이 확장 모듈은 다음의 상수를 정의합니다. 이는 확장 모듈을 PHP에 내장했거나, 실행시에 동적으로 읽어들일 경우에만 사용할 수 있습니다.

PHP 4.3.0부터 mysql_connect()과 mysql_pconnect()에 추가 클라이언트 플래그를 지정할 수 있습니다. 다음의 상수가 정의되어 있습니다:

표 2. MySQL client constants

상수 | 설명
--- | ---
MYSQL_CLIENT_COMPRESS | 압축 프로토콜을 사용합니다.
MYSQL_CLIENT_IGNORE_SPACE | 함수 이름 뒤의 공백을 허용합니다.
MYSQL_CLIENT_INTERACTIVE | 접속을 종료하기 전 비활동의 (wait_timeout 대신) interactive_timeout 초를 허용합니다.

mysql_fetch_array()은 반환 배열을 다른 형식으로 나타내기 위한 상수를 사용합니다. 다음의 상수가 정의되어 있습니다:

표 3. MySQL fetch constants

상수 | 설명
--- | ---
MYSQL_ASSOC | 배열 인덱스로 필드 이름을 가지는 배열로 컬럼을 반환합니다.
MYSQL_BOTH | 배열 인덱스로 숫자 인덱스와 필드 이름을 둘 다 가지는 배열로 컬럼을 반환합니다.
MYSQL_NUM | 필드에 대한 숫자 인덱스를 가지는 배열로 컬럼을 반환합니다. 인덱스는 결과의 첫번째 필드를 0으로 시작합니다.

# 예제

MySQL 데이터베이스에 접속하여, 쿼리를 실행하고, 결과열을 출력하고, 접속을 끊는 방법을 보여주는 간단한 예제입니다.

예 1. MySQL 확장 개요 예제

`<?php
/* 접속하고, 데이터베이스를 선택 */
$link = mysql_connect("mysql_host", "mysql_user", "mysql_password")
or die("접속할 수 없습니다 : " . mysql_error());
echo "접속 성공";
mysql_select_db("my_database") or die("데이터베이스를 선택할 수 없습니다.");
/* SQL 쿼리 실행하기 */
$query = "SELECT * FROM my_table";
$result = mysql_query($query) or die("쿼리 실패 : " . mysql_error());
/* HTML로 결과 출력하기 */
echo "<table>\n";
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
echo "\t<tr>\n";
foreach ($line as $col_value) {
echo "\t\t<td>$col_value</td>\n";
}
echo "\t</tr>\n";
}
echo "</table>\n";
/* 결과셋 해제하기 */
mysql_free_result($result);
/* 접속 종료 */
mysql_close($link);
?>`

이전 | 처음으로 | 다음
msql | 위로 | mysql_affected_rows