我对所有这些编程都很陌生。但我想知道如何将变量值传递给 C/C++ 查询代码中的 SQL/MYSQL 语句。
例如,我想从数据库中选择: mysql_query(conn, "select * from ;"); 假设这是一个变量并接收用户的输入。我该怎么做?任何想法将不胜感激。
你可以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 处理参数。
为了使milleniumbug 的警告更加明确:谷歌“SQL 注入”。解决方案是准备好的语句。
std::string sql = "select * from ?;"
. 这是您可以准备然后执行的语句。准备时,MySQL 会找到?
,而在执行时,您只需为?
. 然后 MySQL 将为您插入表名。
您可以使用它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());