我在将一些值插入数据库时​​遇到问题。数据库名称是users,表是heroes。我正在开发一些 MMORPG 游戏以供学习。

这是可以运行的 mysql 代码

INSERT INTO heroes (HeroID,Strenght, Dexterity, Vitality, Wisdom, Inteligence, Luck, Name, Level, XP) VALUES (NULL,  17, 13, 17, 15, 9, 8, 'works', 4, 3750);

但是当我通过 mysql++ 从 C++ 尝试时,出现错误。

代码:

#include <mysql++/mysql++.h>

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
// Connect to the database.
mysqlpp::Connection conn(false);

if (conn.connect("users", "localhost",
        "root", "toor")) 
{

    mysqlpp::Query query = conn.query();
   query << "INSERT INTO heroes" <<
    "VALUES (NULL, 17, 13, 17, 15, 9, 8, doSomething,3, 3260);";

    query.execute();
    if (mysqlpp::StoreQueryResult res = query.store()) 
    {
     // nothing to do here
    }

    else 
    {
        cerr << "Failed to get item list: " << query.error() << endl;
        return 2;
    }

    return 0;
}

   else 
    {
    cerr << "DB connection failed: " << conn.error() << endl;
    return 1;
    }
}

我得到的错误是:获取商品列表失败;您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在第 1 行 'NULL, 17, 13, 17, 15, 9, 8, doSOthing,3, 3260)' 附近使用的正确语法

附注我要发送null,因为字段是自动灌溉(使用ID),我尝试了几乎所有可能的替代方案,例如添加“”,“分离”等。有人可以帮我解决这行代码吗,因为我找不到对此事有帮助的好教程。

提前致谢

有帮助吗?

解决方案

您是否尝试过在字符串中添加空格?

query << "INSERT INTO heroes " <<
    "VALUES (NULL, 17, 13, 17, 15, 9, 8, 'doSomething', 3, 3260);";

另外,正如指出的 哈姆吉德, doSomething 需要引用,例如 'doSomething'.

其他提示

字符串 doSomething 需求引用:

query << "INSERT INTO heroes "
      << "VALUES (NULL, 17, 13, 17, 15, 9, 8, 'doSomething', 3, 3260);";

正如所指出的 斯特雷佩尔 之间需要有一个空格 heroesVALUES.

如果您的字段是自动增量,则只需在您的查询中提及它,就是它!

但是,您需要将插入查询中的所有字段命名,这实际上是最好的练习!

query << "INSERT INTO heroes (fieldName1,fieldName2,...) " <<
"VALUES (17, 13, 17, 15, 9, 8, doSomething,3, 3260);";
.

其中fieldname1是ID字段(或实际上任何其他字段的第一个字段,您可以使用您想要的任何顺序)。

您可以创建一个标题并粘贴。我将使用table1.h

#include <mysql++.h>
#include <ssqls.h>
#include <vector>       

    //you may get some weird underlines but don't panic, have some vitality.
    sql_create_10(heroes, 1, 10,
            mysqlpp::sql_int, HeroId, mysqlpp::sql_int,
            Strenght, mysqlpp::sql_int, Dexterity, mysqlpp::sql_int, Vitality,
            mysqlpp::sql_int, Wisdom, mysqlpp::sql_int, Inteligence,
            mysqlpp::sql_int, Luck, mysqlpp::sql_varchar, Name, mysqlpp::sql_int,
            Level, mysqlpp::sql_bigint, Xp)
            //if bigint doesn't work for you u can use just int.
. 然后在主要方法中粘贴在

    //connect to database
mysqlpp::Connection conn(false);
try{
    conn.connect("users", "localhost", "j0y57/Qxx", "rootsman");

    heroes row(0, 17, 13, 17, 15, 9, 8, "doSomething", 3, 3260 );
    mysqlpp::Query query = conn.query();
    query.insert(row);
    query.execute();

} catch (const mysqlpp::BadQuery& bq){
    cerr << "query error: " << bq.what() << endl;
    return -1;
}
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top