gpt4 book ai didi

c++ - 使用 C++ Mysql 驱动程序转义字符串

转载 作者:搜寻专家 更新时间:2023-10-31 01:48:46 25 4
gpt4 key购买 nike

我在使用 mysql c++ 驱动程序转义字符串时遇到问题。我通过阅读 mysql 论坛找到了一个小例子,下面似乎是正确的方法。但是,动态类型转换似乎不起作用。有人有任何见解吗?谢谢!

附言“conn”是我的连接对象。它保证在此时分配,所以这不是问题。

编辑:添加类构造函数以完成代码示例。

DbConnector::DbConnector(const ns4__ServerHostResponse &response)
{
try
{
driver = get_driver_instance();
conn.reset(
driver->connect(boost::str(boost::format("tcp://%1%:3306") % response.DatabaseHostName), response.Username, response.Password));
conn->setSchema(response.DbSchema);
query << "";

}
catch(std::exception &ex)
{
throw CustomException(boost::str(boost::format("Unable to connect to database: %1%") % response.DbSchema), ex.what());
}
catch(...)
{
throw StokedTcpException(boost::str(boost::format("Unable to connect to database: %1%") % response.DbSchema));
}
}

void DbConnector::EscapeString(std::string &s) {
if (conn)
{
std::shared_ptr<sql::mysql::MySQL_Connection> mysqlConn(dynamic_cast<sql::mysql::MySQL_Connection*>(conn.get()));
if (mysqlConn)
s = mysqlConn->escapeString(s);
else
throw CustomException("Cannot allocate connection object to escape mysql string!");
}

最佳答案

我知道这可能为时已晚,但供您引用,转换失败是因为您可能没有包括以下内容:

#include <mysql_connection.h>

不是 C++ 中的 sql::connector 的一部分,而是 MySQL 的底层 C 库。

在 Linux Debian 中它位于:

/usr/include/mysql_connection.h

在某些情况下,它与 mysql 连接器一起提供。如果你包含它,那么向下转换就可以正常工作:

sql::mysql::MySQL_Connection * mysql_conn = dynamic_cast<sql::mysql::MySQL_Connection*>(con);
std::string escaped = mysql_conn->escapeString( query );
stmt->execute( escaped );

希望它能帮助遇到同样问题的任何人。

编辑:实际上,您不应该像上面的示例那样转义查询,而应该转义特定的字符串。转义查询可能会转义值周围的单引号。

不知道准备好的语句究竟是如何转义的,因为我已经尝试在 sql::connector 中使用它们但没有成功

关于c++ - 使用 C++ Mysql 驱动程序转义字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17307710/

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