【问题标题】:How to INSERT binary std::string into BLOB如何将二进制 std::string 插入 BLOB
【发布时间】:2010-10-18 12:14:04
【问题描述】:

我有二进制 std::string,我需要使用我拥有的简单数据层将其插入 BLOB (MySQL)。所以,我需要执行查询:ExecuteSQL((LPTSTR)strQ)

当我创建此查询字符串 (strQ) 时,我无法在添加此二进制字符串后向该字符串添加任何内容 - 如果终止它只是一种类型,并且无法添加任何内容。我不想使用mysql_real_escape_string,因为我不仅想为 MySQL 保留它。

请大家帮忙!!!

【问题讨论】:

    标签: c++ mysql blob


    【解决方案1】:

    假设您的代码如下所示:

    std::string s = ...      // populate string somehow
    ExecuteSQL( (LPCSTR) s );
    

    那么你有几个问题。 Forstly,演员阵容不会工作。在 C++ 中,每当使用强制转换时,几乎可以肯定你在做一些不正确的事情,这会破坏你的代码。您需要使用 std::string 成员函数 c_str() 创建一个以 null 结尾的字符串:

    ExecuteSQL( s.c_str() );
    

    但是,这可能无法解决您的所有问题,因为您说您有一个二进制字符串。如果该字符串包含零字节,那么您的 SQL 将终止于该字符而不是字符串的结尾。在这种情况下,您可能需要研究明确绑定您的值。

    编辑:有关如何将参数绑定到 MySQL 语句的详细信息,请参阅http://dev.mysql.com/doc/refman/5.1/en/mysql-stmt-bind-param.html

    【讨论】:

    • 是的,(LPCSTR) s 是使用 strSQL.c_str() 创建的,但首先我们需要创建这个 strSQL (std::string),例如: strSQL = "INSERT INTO mydatabase.mytable (col1, BLOBCol2 ) VALUES('"; strSQL += strForCol1; strSql += "', '"; 现在我们需要添加这个二进制字符串...
    • 主要问题是转义字符,主要问题是 - 我们可以不使用 mysql_real_escape_string 吗?任何例子都会有很大帮助。谈论绑定值 - 请您举个例子吗?
    猜你喜欢
    • 2010-10-18
    • 1970-01-01
    • 2015-06-09
    • 2015-07-22
    • 1970-01-01
    • 2015-02-15
    • 1970-01-01
    • 2014-04-15
    • 2013-06-06
    相关资源
    最近更新 更多