2011-10-19 2 views
2

(다른 나를 설명) 메신저 내가에 동일하지 mysql을에 무슨 일이 생긴 데이터 다음 기능을 사용할 때 그C 배열을 사용하여 MySQL에 바이트 배열을 쓰고 있습니까?

bool writeBinary(char * someQuery, LPBYTE buffer) 
{ 
} 

처럼 funciton 만들기 위해 찾고 VARBINARY 또는으로 바이트 배열을 작성할 수있는 현명한 방법이 버퍼

void CDBManager::SetBinary(const char * lpszStatement, LPBYTE lpBinaryBuffer, 
ULONG BinaryBufferSize) 
{ 
MYSQL_STMT *stmt; 
MYSQL_BIND bind[1]; 
char * shhh = new char[BinaryBufferSize]; 
// ---- 
memcpy(shhh, lpBinaryBuffer, BinaryBufferSize); 

stmt = mysql_stmt_init(&getDB()->m_hMySQL); 
printf("\n"); 
if(BinaryBufferSize >= 2752) 
{ 
    for(int i = 0; i < BinaryBufferSize; i++) 
    { 
     if(lpBinaryBuffer[i] == 0xFF && 
       lpBinaryBuffer[i+1] == 0xFF && lpBinaryBuffer[i+2] == 0xFF && lpBinaryBuffer[i+3] == 0xFF && lpBinaryBuffer[i+4] == 0xFF && lpBinaryBuffer[i+5] == 0xFF && 
        lpBinaryBuffer[i+6] == 0xFF && lpBinaryBuffer[i+7] == 0xFF && lpBinaryBuffer[i+8] == 0xFF && lpBinaryBuffer[i+9] == 0xFF && lpBinaryBuffer[i+10] == 0xFF && 
        lpBinaryBuffer[i+11] == 0xFF && lpBinaryBuffer[i+12] == 0xFF && lpBinaryBuffer[i+13] == 0xFF && lpBinaryBuffer[i+14] == 0xFF && lpBinaryBuffer[i+15] == 0xFF) 
     { 
     } 
     else 
     { 
      printf("[%d] %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X\n", i, lpBinaryBuffer[i], 
       lpBinaryBuffer[i+1], lpBinaryBuffer[i+2], lpBinaryBuffer[i+3], lpBinaryBuffer[i+4], lpBinaryBuffer[i+5], 
        lpBinaryBuffer[i+6], lpBinaryBuffer[i+7], lpBinaryBuffer[i+8], lpBinaryBuffer[i+9], lpBinaryBuffer[i+10], 
        lpBinaryBuffer[i+11], lpBinaryBuffer[i+12], lpBinaryBuffer[i+13], lpBinaryBuffer[i+14], lpBinaryBuffer[i+15]); 
     } 
     i+=15; 
    } 
} 
printf("\n"); 

if(stmt == NULL) 
{ 
    fprintf(stderr, " mysql_stmt_init(), out of memory\n"); 
} 
else if(mysql_stmt_prepare(stmt, lpszStatement, strlen(lpszStatement))) 
{ 
    fprintf(stderr, " mysql_stmt_prepare(), INSERT failed\n"); 
    fprintf(stderr, " %s\n", mysql_stmt_error(stmt)); 
} 
else 
{ 
    memset(bind, 0, sizeof(bind)); 
    // ---- 
    bind[0].buffer_type  = MYSQL_TYPE_BLOB; 
    bind[0].buffer   = (char *)shhh; 
    bind[0].buffer_length = BinaryBufferSize; 
    bind[0].is_null   = 0; 
    bind[0].length   = 0; 
    // ---- 
    // allways filed? what? this calls they are good, i made by example on mysql.com so what dont work 
    // it always return len 0 => no data saved in db 
    if(mysql_stmt_bind_param(stmt, bind)) 
    { 
     fprintf(stderr, " mysql_stmt_bind_param() failed\n"); 
     fprintf(stderr, " %s\n", mysql_stmt_error(stmt)); 
    } 
    else if(mysql_stmt_execute(stmt)) 
    { 
     fprintf(stderr, " mysql_stmt_execute(), 1 failed\n"); 
     fprintf(stderr, " %s\n", mysql_stmt_error(stmt)); 
    } 
} 
// ---- 
delete shhh; 

}

감사

당신의 바인드 사이

답변

0

하고 실행하는 *

if(mysql_stmt_send_long_data(stmt, 2, (const char*)ser.data(), data_length)) { 
    ERROR("dehydrate : failed to send long data : %s", mysql_stmt_error(stmt)); 
    goto abort; 
} 

;

* mysql_stmt_send_long_data ({STMT}, {전계 번호}, {데이터}, {데이터 길이}) : 서버 측에 BLOB 데이터를 업로드 다음 행을 위해 dd field-number는 0부터 시작하여 1 필드 만 가지고 있기 때문에 0이됩니다.

또한 BLOB 형식은 최대 64KB 만 지원하므로 최대 1GB 인 "긴 BLOB"데이터 형식이 필요할 수 있습니다.

관련 문제