我有二进制 std::string,我需要使用我拥有的简单数据层将它插入 BLOB (MySQL)。所以,我需要执行查询:ExecuteSQL((LPTSTR)strQ)
。
当我创建此查询字符串 (strQ) 时,我无法在添加此二进制字符串后向该字符串添加任何内容 - 如果终止并且无法添加任何内容,它就会正常。我不想使用 mysql_real_escape_string
因为我不仅要为 MySQL 保留它。
请有人帮忙!!!
最佳答案
假设您的代码看起来像这样:
std::string s = ... // populate string somehow
ExecuteSQL( (LPCSTR) s );
然后你有几个问题。 ForSTLy, Actor 阵容将无法正常工作。在 C++ 中,每当您使用强制转换时,您几乎肯定会做一些不正确的事情,这会破坏您的代码。您需要使用 std::string 成员函数 c_str() 创建一个以 null 结尾的字符串:
ExecuteSQL( s.c_str() );
但是,这可能无法解决您所有的问题,因为您说您有一个二进制字符串。如果该字符串包含零字节,那么您的 SQL 将终止于该字符而不是字符串的末尾。在这种情况下,您可能需要调查明确绑定(bind)您的值。
编辑:有关如何将参数绑定(bind)到 MySQL 语句的详细信息,请参阅 http://dev.mysql.com/doc/refman/5.1/en/mysql-stmt-bind-param.html
关于c++ - 如何将二进制 std::string 插入 BLOB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/733262/