2011. 7. 12. 06:16

▷ 모든 API함수에 대한 오류는 에러 코드를 되돌려 줌으로서 나타나며,

세부 내용은 접속 처리 구조체를 통해 알려준다.

오류 메시지를 처리할 때 다음과 같인 두 개의 루틴만 알고 있으면 된다.

 

mysql_errno() - 가장 최근에 실행된 MySQL API 함수의 에러 코드를 리턴.

형태

unsigned int mysql_errno(MYSQL *mysql)

인수

mysql: MYSQL* 핸들

반환값

에러가 있을 경우: 마지막으로 호출된 API함수(mysql()_xxx)를 위한 에러 코드.

에러가 없을 경우: 0(zero)

 

mysql_error() - 가장 최근에 실행된 MySQL API 함수의 에러 메시지 문자열 리턴.

형태

const char *mysql_errno(MYSQL *mysql)

인수

mysql: MYSQL* 핸들

반환값

에러가 있을 경우: 마지막으로 호출된 API함수(mysql()_xxx)를 위한 에러 메시지 문자열.

에러가 없을 경우: 빈 문자열.

 

mysql_error()함수의 메시지는 내부의 정적 공간이므로,

오류 메시지를 저장하려면 메시지를 다른 위치에 복사하면 된다.

 

mysql_errno() 함수에 의해 리턴된 MySQL-지정 에러 숫자들은

mysql_sqlstate() 함수에 의해 리턴된 SQLSTATE 값과 다르다.

예를 들어, mysql 클라이언트 프로그램은 다음 포맷을 사용 중인 에러들을 보여준다.

여기서 1146 mysql_errno() 함수 값이고, '42S02' mysql_sqlstate() 함수 값과 일치한다:

shell> SELECT * FROM no_such_table;

ERROR 1146 (42S02): Table 'test.no_such_table' doesn't exist

 

 

주의:

mysql_fetch_row() 같은 몇몇 함수들은 성공하면 mysql_errno()를 설정하지 않음.

(경험적으로 서버에 정보를 요구하는 함수는, 성공했을 경우에 mysql_errno()를 재설정)

 

에러 메시지가 기술된 헤더 파일:

클라이언트 에러 메시지 숫자: MySQL errmsg.h 헤더 파일에 기술.

서버 에러 메시지 숫자 : mysqld_error.h 헤더 파일에 기술.

 

예제:

MYSQL mysql;

mysql_init(&mysql);

mysql_option(&mysql, MYSQL_READ_DEFAULT_GROUP, "your_prog_name");

if ( ! mysql_real_connect(&mysql, "host", "user", "passwd", "database", 0, NULL, 0)) {

■■■■fprintf(stderr, "Connection error %d: %s\n", mysql_errno(&mysql), mysql_error(&mysql));

}

 

Posted by devanix