gpt4 book ai didi

c++ - 如何通过 C++ 代码在 MySQL DB 中存储控制字符?

转载 作者:太空宇宙 更新时间:2023-11-04 14:15:41 25 4
gpt4 key购买 nike

我有一个要求。在我的项目中,我需要存储控制字符(ASCII 字符范围从 0 到 31)。但是这里我需要以字符的形式存储。我写了一个c代码,但没有用。我在这里发布我写的代码。我的 IDE 是 Visual Studio 2010,我使用的是 MySQL Connector C 6.0.2

     #include "stdafx.h"
#include <iostream>
#include <string>
#include<my_global.h>
#include <mysql.h>

using namespace std;

MYSQL* Connection, MySQL;

int _tmain(int argc, _TCHAR* argv[])
{
int i;
string sData;
char SQLString[384];

for(i=0;i<=31;i++)
sData+=i;

char *Hostname="localhost", *Username="root", *Password="system123", *Database="file_data";

mysql_init(&MySQL);
Connection = mysql_real_connect(&MySQL, Hostname, Username, Password, Database, 0, 0, 0);

if (Connection == NULL)
exit(1);

sprintf_s(SQLString,384,"set sql_mode='NO_BACKSLASH_ESCAPES';");
mysql_query(Connection, SQLString );

sprintf_s(SQLString,384,"insert into file_values(first_data)values('%s')",sData.c_str());
mysql_query(Connection, SQLString );
return 0;
}

在这里,在编写实际项目代码之前,我编写了一个示例应用程序来测试它是否能够存储,但是通过使用上面的代码,我无法将控制字符存储在 file_values 表的 first_data 列中。

first_data 的数据类型是 varchar,大小为 33。

请让我知道我需要在上面的代码中做些什么来实现我的要求。

谢谢大家。

最佳答案

您可能应该为此使用准备好的语句,而不是尝试将您的字符代码嵌入到字符串中。您还可能会更好地使用 blob 数据类型而不是字符串。

这是一个(未经测试的)示例,说明如何使用准备好的语句存储 blob:

MYSQL_STMT* statement = mysql_stmt_init(Connection);
std::string statementStr = "insert into file_values(first_data) values (?)";
mysql_stmt_prepare( &statement, statementStr.c_str(), statementStr.length() );

MYSQL_BIND parameter;

parameter[0].buffer_type= MYSQL_TYPE_BLOB;
parameter[0].buffer= (char*)sData.c_str();
parameter[0].is_null= 0;
parameter[0].length= sData.length();
mysql_stmt_bind_param( statement, &parameter );

mysql_stmt_execute(stmt);
mysql_stmt_close(statement);

或者,如果您需要坚持使用 varchar 作为列类型,您可能只需将上面的 buffer_type 替换为 MYSQL_TYPE_STRING

关于c++ - 如何通过 C++ 代码在 MySQL DB 中存储控制字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11454499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com