0

我对所有这些编程都很陌生。但我想知道如何将变量值传递给 C/C++ 查询代码中的 SQL/MYSQL 语句。

例如,我想从数据库中选择: mysql_query(conn, "select * from ;"); 假设这是一个变量并接收用户的输入。我该怎么做?任何想法将不胜感激。

4

3 回答 3

3

你可以std::string像其他人说的那样使用,但你也可以使用sql::PreparedStatement更安全的:

sql::Connection *con;
sql::PreparedStatement *prep_stmt
const char* tableName = "foo";

prep_stmt = con->prepareStatement("SELECT * FROM ?");
prep_stmt->setString(1, tableName);
prep_stmt->execute();

当使用准备好的语句时,DBMS 将按原样解析和编译语句,并且仅在执行语句时绑定参数的值。这允许您使用不同的参数多次重用相同的语句,但也为您提供强大的SQL 注入保护,因为您让 DBMS 处理参数。

于 2013-04-25T09:09:59.130 回答
2

为了使milleniumbug 的警告更加明确:谷歌“SQL 注入”。解决方案是准备好的语句。

std::string sql = "select * from ?;". 这是您可以准备然后执行的语句。准备时,MySQL 会找到?,而在执行时,您只需为?. 然后 MySQL 将为您插入表名。

于 2013-04-25T09:05:07.187 回答
1

您可以使用它std::string来轻松构建 SQL 语句。

#include <string>

std::string CreateSelectStatement(const std::string& tableName)
{
    std::string  sql;

    sql = "select * from " + tableName + ";";

    return sql;
}

然后,您可以使用该字符串来查询数据库。

std::string sql(CreateSelectStatement("sometable"));

mysql_query(conn, sql.c_str()); 
于 2013-04-25T04:13:03.697 回答