23.8.10 C API Prepared Statement 함수 개요
준비된 명령문의 처리에 사용 가능한 함수의 개요를 여기에서 보여 나머지 섹션에서 자세히 설명합니다. 섹션 23.8.11 "C API Prepared Statement 함수 설명" 을 참조하십시오.
함수 | 설명 |
---|---|
mysql_stmt_affected_rows() | 준비된 UPDATE , DELETE 또는 INSERT 문에 의해 변경, 삭제, 삽입 된 행 수를 반환합니다 |
mysql_stmt_attr_get() | 준비된 명령문의 속성 값을 가져옵니다 |
mysql_stmt_attr_set() | 준비된 명령문의 속성을 설정합니다 |
mysql_stmt_bind_param() | 어플리케이션 데이터 버퍼를 준비된 SQL 문 매개 변수 마커에 연결합니다 |
mysql_stmt_bind_result() | 어플리케이션 데이터 버퍼를 결과 세트의 컬럼에 연결합니다 |
mysql_stmt_close() | Prepared Statement에 의해 사용되는 메모리를 해제합니다 |
mysql_stmt_data_seek() | 문 결과 집합의 모든 행 번호를 검색합니다 |
mysql_stmt_errno() | 마지막 문 실행 오류 번호를 반환합니다 |
mysql_stmt_error() | 마지막 문 실행 오류 메시지를 반환합니다 |
mysql_stmt_execute() | Prepared Statement을 실행합니다 |
mysql_stmt_fetch() | 결과 집합에서 다음 데이터 행을 반입하고 바인딩 된 모든 컬럼 데이터를 반환합니다 |
mysql_stmt_fetch_column() | 결과 세트의 현재 행의 하나의 컬럼 데이터를 가져옵니다 |
mysql_stmt_field_count() | 최근 문의 결과 컬럼의 수를 돌려줍니다 |
mysql_stmt_free_result() | 문 손잡이에 할당 된 자원을 해제합니다 |
mysql_stmt_init() | MYSQL_STMT 구조에 메모리를 할당 해 그것을 초기화합니다 |
mysql_stmt_insert_id() | Prepared Statement에 의해 AUTO_INCREMENT 컬럼에 생성 된 ID를 반환합니다 |
mysql_stmt_next_result() | 여러 결과의 실행에 다음의 결과를 반환하거나 초기화합니다 |
mysql_stmt_num_rows() | 버퍼 된 문 결과 집합에서 행 수를 반환합니다 |
mysql_stmt_param_count() | Prepared Statement에서 매개 변수의 수를 돌려줍니다. |
mysql_stmt_param_metadata() | (결과 세트의 형식에서 파라미터 메타 데이터를 반환합니다) 현재,이 함수는 아무것도 실행하지 않습니다 |
mysql_stmt_prepare() | SQL 문 문자열의 실행을 준비합니다 |
mysql_stmt_reset() | 서버에서 문 버퍼를 리셋합니다 |
mysql_stmt_result_metadata() | 결과 세트의 형식으로 Prepared Statement 메타 데이터를 반환합니다 |
mysql_stmt_row_seek() | mysql_stmt_row_tell() 에서 반환 된 값을 사용하여 문 결과 집합의 행 오프셋을 검색합니다. |
mysql_stmt_row_tell() | 문 행 커서 위치를 돌려줍니다 |
mysql_stmt_send_long_data() | 긴 데이터를 정리하여 서버에 전송합니다 |
mysql_stmt_sqlstate() | 마지막 문 실행의 SQLSTATE 에러 코드를 돌려줍니다 |
mysql_stmt_store_result() | 클라이언트에 대한 전체 결과 세트를 가져옵니다 |
mysql_stmt_init()
를 호출하여 문 핸들을 만든 다음 mysql_stmt_prepare()
를 호출 명령문 문자열을 준비하고 mysql_stmt_bind_param()
를 호출하여 매개 변수 데이터를 제공하고 mysql_stmt_execute()
를 호출하여 문을 실행합니다. mysql_stmt_bind_param()
에서 제공하는 각 버퍼의 매개 변수 값을 변경함으로써 mysql_stmt_execute()
를 반복 할 수 있습니다.
mysql_stmt_send_long_data()
를 사용하여 텍스트 나 바이너리 데이터를 정리하여 서버에 전송할 수 있습니다. 섹션 23.8.11.26 "mysql_stmt_send_long_data ()" 를 참조하십시오.
문이 SELECT
또는 결과 세트를 생성하는 다른 문이면 mysql_stmt_prepare()
는 mysql_stmt_result_metadata()
을 통해 MYSQL_RES
결과 셋 형식으로 결과 셋 메타 데이터 정보를 반환합니다.
mysql_stmt_fetch()
가 자동으로 결과 버퍼에 데이터를 반환하도록 mysql_stmt_bind_result()
를 사용하여 그 버퍼를 제공 할 수 있습니다. 이것은 행 단위의 페치입니다.
문 실행이 완료되면 mysql_stmt_close()
를 사용하여 문 핸들을 닫고 연관된 모든 자원을 해제 할 수 있도록합니다.
mysql_stmt_result_metadata()
를 호출하여 SELECT
문의 결과 집합 메타 데이터를 검색하는 경우 mysql_free_result()
를 사용하여 메타 데이터 해제하십시오.
실행 단계
문을 준비하고 실행하려면 응용 프로그램은 이러한 단계를 따릅니다.
mysql_stmt_init()
에 의해 Prepared Statement 핸들을 만듭니다. 서버에서 문을 준비하려면mysql_stmt_prepare()
를 호출 해, 게다가 SQL 문을 포함하는 문자열을 전달합니다.문이 결과 세트를 생성하는 경우
mysql_stmt_result_metadata()
를 호출하여 결과 셋 메타 데이터를 가져옵니다. 이 메타 데이터는 쿼리에서 반환되는 행을 저장하는 것과는 다른 것입니다 만, 그 자체가 결과 세트 형식입니다. 메타 데이터 결과 집합은 결과에있는 컬럼 수를 나타 각 컬럼에 대한 정보를 포함합니다.mysql_stmt_bind_param()
를 사용하여 매개 변수의 값을 설정합니다. 모든 매개 변수를 설정해야합니다. 그렇지 않으면, 문 실행이 오류를 반환하거나 예기치 않은 결과를 생성합니다.mysql_stmt_execute()
를 호출하여 문을 실행합니다.문이 결과 세트를 생성하는 경우,
mysql_stmt_bind_result()
를 호출하여 행 값을 얻기 위해 사용하는 데이터 버퍼를 바인딩합니다.mysql_stmt_fetch()
를 반복 호출하여 그 이상의 행이 발견되지 않을 때까지 행마다 데이터를 버퍼로 가져옵니다.매개 변수 값을 변경하고 문을 다시 실행하여 필요에 따라 3-6 단계를 반복합니다.
mysql_stmt_prepare()
가 호출되면, MySQL 클라이언트 / 서버 프로토콜은 이러한 작업을 수행합니다.
서버가 문을 분석하여 문 ID를 할당하고 클라이언트에 정상 상태를 반환합니다. 또한,이 결과 집합 지향 문인 경우 매개 변수의 총 수, 컬럼 카운트, 그리고 메타 데이터도 전송합니다. 이 호출 중에 서버에서 문 모든 구문과 의미가 체크됩니다.
서버가 문 풀에서 문을 식별 할 수 있도록 클라이언트는 후속 작업이 문 ID를 사용합니다.
mysql_stmt_execute()
가 호출되면, MySQL 클라이언트 / 서버 프로토콜은 이러한 작업을 수행합니다.
클라이언트는 문 핸들을 사용하여 서버에 파라미터 데이터를 전송합니다.
서버는 클라이언트가 제공 한 ID를 사용하여 문을 식별하고 매개 변수 마커를 새롭게 제공된 데이터로 대체하여 문을 실행합니다. 문이 결과 세트를 생성하는 경우, 서버는 클라이언트에 데이터를 반환합니다. 그렇지 않으면 제대로 상태로 변경, 삭제 또는 삽입 된 행 수를 보냅니다.
mysql_stmt_fetch()
가 호출되면, MySQL 클라이언트 / 서버 프로토콜은 이러한 작업을 수행합니다.
클라이언트는 결과 세트의 현재 행에서 데이터를 읽고 필요한 변환을 거친 후, 그것을 어플리케이션 데이터 버퍼에 배치합니다. 응용 프로그램 버퍼의 형태가 서버에서 반환되는 필드의 형태의 그것과 같은 경우, 변환은 간단합니다.
오류가 발생한 경우 mysql_stmt_errno()
, mysql_stmt_error()
및 mysql_stmt_sqlstate()
을 각각 사용하여 문 오류 번호 오류 메시지 및 SQLSTATE 코드를 얻을 수 있습니다.
Prepared Statement 로깅
mysql_stmt_prepare()
와 mysql_stmt_execute()
C API 함수에 의해 실행 된 Prepared Statement에 대해 서버는 일반 쿼리 로그에 Prepare
및 Execute
라인을 작성하는 명령문이 준비되고 실행 된 시간을 알 수 있습니다.
다음과 같이 문을 준비하고 실행해야합니다.
mysql_stmt_prepare()
를 호출 명령문 문자열"SELECT ?"
를 준비합니다.mysql_stmt_bind_param()
를 호출하여 값3
을 Prepared Statement 매개 변수에 바인딩합니다.mysql_stmt_execute()
를 호출하여 Prepared Statement을 실행합니다.
이전 호출의 결과로서 서버는 일반 쿼리 로그에 다음 줄을 씁니다.
Prepare [1] SELECT ? Execute [1] SELECT 3
로그의 각 Prepare
및 Execute
라인은
문 식별자 태그되므로 기록되어있는 Prepared Statement을 추적 할 수 있습니다. [ N ]
N
은 양의 정수입니다. 클라이언트에 동시에 활성 여러 Prepared Statement이있는 경우, N
은 1보다 클 수 있습니다. ?
매개 변수의 데이터 값의 치환 후의 각 Execute
행에 Prepared Statement이 표시됩니다.