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_portNULLPHP_INI_ALL
mysql.default_socketNULLPHP_INI_ALL
mysql.default_hostNULLPHP_INI_ALL
mysql.default_userNULLPHP_INI_ALL
mysql.default_passwordNULLPHP_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/servicesmysql_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);
?>

차례
mysql_affected_rows -- 최근 MySQL 작업으로 처리된 행(row) 개수를 얻음
mysql_change_user --  현 접속에서 로그인된 사용자를 변경
mysql_client_encoding -- Returns the name of the character set
mysql_close -- MySQL 접속을 닫음
mysql_connect -- MySQL 서버에 접속
mysql_create_db -- MySQL 데이터베이스를 생성
mysql_data_seek -- 내부적인 결과 포인터를 이동
mysql_db_name -- 데이터 결과를 얻음
mysql_db_query -- MySQL 질의문을 전송
mysql_drop_db -- MySQL 데이터베이스를 삭제
mysql_errno -- 최근 MySQL 작업으로 발생한 에러 번호를 반환
mysql_error -- 최근 실행된 MySQL 작업으로 발생한 에러 메시지를 반환
mysql_escape_string --  Escapes a string for use in a mysql_query.
mysql_fetch_array --  결과를 필드이름 색인 또는 숫자 색인으로 된 배열로 반환
mysql_fetch_assoc --  결과를 필드이름 색인으로 된 배열로 반환
mysql_fetch_field --  결과로부터 열 정보를 얻어서 객체로 반환
mysql_fetch_lengths --  결과로부터 각 출력의 길이를 반환
mysql_fetch_object -- 행(row)의 결과를 객체로 얻음
mysql_fetch_row -- 결과를 숫자색인으로 된 배열로 반환
mysql_field_flags --  결과로부터 특정 필드(field)의 상태정보(flag)를 반환
mysql_field_len --  특정 필드의 길이를 반환
mysql_field_name --  결과로부터 특정 필드 이름을 반환
mysql_field_seek --  특정 필드의 오프셋(offset)으로 위치(pointer)를 이동
mysql_field_table --  특정 필드가 속한 테이블 이름을 얻음
mysql_field_type --  결과로부터 특정 필드의 데이터 형(type) 정보를 반환
mysql_free_result -- Free result memory
mysql_get_client_info -- Get MySQL client info
mysql_get_host_info -- Get MySQL host info
mysql_get_proto_info -- Get MySQL protocol info
mysql_get_server_info -- Get MySQL server info
mysql_info --  Get information about the most recent query
mysql_insert_id --  최근 INSERT 작업으로부터 생성된 identifier 값을 반환
mysql_list_dbs --  MySQL 서버에 있는 데이터베이스 이름을 반환
mysql_list_fields -- MySQL 결과의 필드 리스트로 반환
mysql_list_processes -- List MySQL processes
mysql_list_tables -- MySQL 데이터베이스에 있는 테이블 목록을 반환
mysql_num_fields -- 결과로부터 필드 개수를 반환
mysql_num_rows -- 결과로부터 열 개수를 반환
mysql_pconnect --  MySQL 서버와 영구적인 데이터베이스 접속
mysql_ping -- Ping a server connection or reconnect if there is no connection
mysql_query -- Send a MySQL query
mysql_real_escape_string --  Escapes special characters in a string for use in a SQL statement, taking into account the current charset of the connection.
mysql_result -- 결과 데이터를 반환
mysql_select_db -- MySQL 데이터베이스를 선택
mysql_stat -- Get current system status
mysql_tablename -- 필드의 테이블이름을 얻음
mysql_thread_id -- Return the current thread ID
mysql_unbuffered_query --  Send an SQL query to MySQL, without fetching and buffering the result rows