题
我在将一些值插入数据库时遇到问题。数据库名称是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);";
正如所指出的 斯特雷佩尔 之间需要有一个空格 heroes
和 VALUES
.
如果您的字段是自动增量,则只需在您的查询中提及它,就是它!
但是,您需要将插入查询中的所有字段命名,这实际上是最好的练习!
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;
}
. 不隶属于 StackOverflow