将变量插入到MySQL表中

6
我知道如何在MySql表中插入非变量值(使用C ++):
例如:
//Table person:
mysql_query(conn, "INSERT INTO MyTable VALUES (  '1', 'John', 'Kennedy')");
mysql_query(conn, "INSERT INTO MyTable VALUES (  '2', 'Dave', 'Chappelle')");
mysql_query(conn, "INSERT INTO MyTable VALUES (  '3', 'Arnold', 'Schwarzenegger')");
//Up to 100 rows of data...

我想做的是能够在C++中将变量插入表格中:
例如:
i=0;
for(i=0; i < 100; i++)
{
mysql_query(conn, "INSERT INTO MyTable VALUES ( i, 'FirstName', 'LastName')"); 
}

与其手动输入100行数据,我想使用for循环并增加一个变量来为我创建行。

有人知道如何使用C ++将变量插入到mysql数据库中吗?

5个回答

5
我对让它工作所需的语法不太熟悉,但你想要的通用版本是预编译语句。您可以制作一个具有占位符变量的语句。稍后提供这些变量的值并使用它们。
编辑:您可以在MySQL网站中找到更多关于C ++使用预编译语句的信息。
// ...
sql::Connection *con;
sql::PreparedStatement  *prep_stmt
// ...

prep_stmt = con->prepareStatement("INSERT INTO test(id, label) VALUES (?, ?)");

prep_stmt->setInt(1, 1);
prep_stmt->setString(2, "a");
prep_stmt->execute();

prep_stmt->setInt(1, 2);
prep_stmt->setString(2, "b");
prep_stmt->execute();

delete prep_stmt;
delete con;

请更新MySQL网站的链接,因为它已经失效。谢谢。 - knoxgon

3

您可以通过

   int var = 10;
   string str = to_string(var);
   string requete="INSERT INTO stat(temps) VALUES (\"";
   requete += str;
   requete += "\")";
   mysql_query(&mysql,requete.c_str());

只需在mySql中指定该字段的类型为int、double、float等即可。


0

这对我有用。

#include <stdio.h>
#include <stdlib.h>
#include <iostream>

#include <mysql_connection.h>

#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>

sql::Driver *driver;
sql::Connection *con;
sql::ResultSet *res;
sql::Statement *stmt;

/* Create a connection */
driver = get_driver_instance();
con = driver->connect("tcp://127.0.0.1:3306", "admin", "password");

// db name
con->setSchema("db_name");

std::string lookup = "bob" ;

stmt = con->createStatement();
res = stmt->executeQuery("SELECT last_name FROM names_table WHERE first_name = '" + lookup + "'");
while (res->next()) {
  std::cout << res->getString("last_name") << std::endl;
}

delete res;
delete stmt;
delete con;

0

在执行查询之前,您需要先创建查询字符串。将下面的printf替换为一个字符串类实例以创建一个查询字符串。您可能还想将其放在字符串向量中。

char queryFmt[]="INSERT INTO myTable VALUES('%d','%s',%s)\n";
char color[16];
char fruit[32];
for(int i=0;i<2;i++)
{       
    //scanf_s("%s",color);
    //scanf_s("%s",fruit);      
    std::cin>>color;
    std::cin>>fruit;
    printf_s(queryFmt,i,color,fruit);

}

如果您还不知道如何在循环中使用scanf读取字符或字符串,并且对此感兴趣,请参考相关问题的许多线程。


1
哇,同一个示例中存在缓冲区溢出和SQL注入漏洞! - David Gelhar
是的,那只是解决他当前问题的提示,不是真正的解决方案,还有很多事情需要考虑... - Bunny Pigtails

-1
i=0;
for(i=0; i < 100; i++)
{
mysql_query(conn, "INSERT INTO MyTable VALUES ( '"+i+"', 'blue', 'pumpkin')"); 
}

这应该可以工作


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接