5

いくつかの値をデータベースに挿入するのに問題があります。データベース名はユーザー、テーブルはヒーローです。私は学習目的でいくつかの 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 構文にエラーがあります。1 行目の 'NULL, 17, 13, 17, 15, 9, 8, doSOmething,3, 3260)' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

psフィールドが自動インクリメント(IDに使用)であるため、NULLを送信しています。「」の追加、分離など、ほとんどすべての可能な代替手段を試しました。この問題に役立つ良いチュートリアルが見つからないので、誰かがこのコード行で私を助けてくれますか?

前もって感謝します

4

4 に答える 4

5

文字列にスペースを追加しようとしましたか?

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

また、 hmjdで指摘されてdoSomethingいるように、 のように引用する必要があります'doSomething'

于 2014-02-27T17:23:25.517 に答える
5

文字列doSomethingは引用符で囲む必要があります:

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

Streppelが指摘したように、と の間heroesにスペースが必要ですVALUES

于 2014-02-27T17:23:40.027 に答える
2

フィールドが自動インクリメントの場合は、クエリで言及しないでください。それだけです。

ただし、挿入クエリのすべてのフィールドに名前を付ける必要があります。これは、とにかくベストプラクティスです!

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

ここで、fieldname1 は id フィールドの直後の最初のフィールドです (または実際には他の任意のフィールドで、任意の順序を使用できます)。

于 2014-02-27T17:24:30.890 に答える