sqlite_bind_text(), sqlite_bind_text16(), sqlite_bind_blob()
의 세 함수는 다른 바인드 함수보다 파라메터의 수가 좀더 많다.
텍스트를 기준으로 원형은
int sqlite3_bind_text(sqlite3_stmt*, int, const char*, int n, void(*)(void*));
이다.
여기서 첫번째 인자는 statement 핸들이다.
두번째 인자는 데이터가 들어갈 순서이다.
~~~ values(?,?,?,?) 식으로 구성이 되어있을때 맨 좌측 ?표가 1번째 물음표이다. 두번째 인자가 3 이라면 맨좌측으로부터 세번째 ?표에 데이터를 넣으라는 뜻.
세번째 인자는 db에 넣을 데이터 이다.
네번째 인자는 세번째에서 지정한 데이터의 크기를 정한다. -1(음수)를 넣으면 전체 데이터를 넣는다.
다섯번째 인자는 특별한 인자 이다.
들어가는 값으로 SQLITE_STATIC 과 SQLITE_TRANSIENT가 있다.
SQLITE_STATIC의 경우 바인딩 되는 변수를 static변수(free가 될 일이 없는)로 사용한다는 의미 이다.
변수가 중간에 변경되거나 메모리가 해제 되면 문제가 발생할 수 있다.
SQLITE_TRANSIENT는 바인딩 변수가중간에 변경이 될 수도 있기에 해당 변수값을 복사하여 사용한다. 중간에 변수가 변경이 되어도 복사한 값으로 사용되기에 문제없다.
다만 복사과정이 들어가기에 안전하나 SQLITE_STATIC 보다는 속도가 느리다