是否有任何智能方法将字节数组写入varbinary或(其他解释我) 我希望像这样做功能
bool writeBinary(char * someQuery, LPBYTE buffer)
{
}
当我使用next函数时,mysql中发生的数据与缓冲区
不同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 :(得分:0)
在bind和execute之间添加以下行,将blob数据上传到服务器端:
* mysql_stmt_send_long_data({stmt},{field-number},{data},{data length}); *
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;
}
字段编号从零开始,在您的情况下为0,因为您只有1个字段。
此外,blob类型最多只支持64k,您可能需要“长blob”数据类型,最高可达1GB。