2009-07-28 6 views
6

MySQL C APIでC++を使用してmysqlでテーブル行をフェッチしようとすると、混乱します。MySQL C APIとC++を使用したMySQLデータベーステーブルの行の取得

私たちはまた、汚れたプロセスの世話をする必要があるように、C++が強く型付けされた言語であるという理由だけで、PHPで簡単に行うことができます。..

これは私がPHP

でそれを行ってどのようです
$data = array(); 
$i = 0; 
$query = mysql_query("SELECT * FROM `my_table`"); 
while($fetch = mysql_fetch_array($query)) 
{ 
    $data[$i] = $fetch['columntobefetched']; 
    $i++; 
}

しかし、C++でMySQL APIを使って同じことを行う方法はありますか?

はここで基本的に私は、データベーステーブルのフィールドから値を取得し、それを変数に格納したいと思った...混乱行き止まりと....これまでx__x

 MYSQL *sqlhnd = mysql_init(NULL); 
    mysql_real_connect(sqlhnd, "server", "user", "pass", "database", port, NULL, 0); 

    mysql_query(sqlhnd, "SELECT * FROM `my_table`"); 
    MYSQL_RES *confres = mysql_store_result(sqlhnd); 
    int totalrows = mysql_num_rows(confres); 
    int numfields = mysql_num_fields(confres); 
    MYSQL_FIELD *mfield; 

    while((row = mysql_fetch_row(confres))) 
    { 
     for(i = 0; i < numfields; i++) 
     { 
      while(mfield = mysql_fetch_field(confres)) 
      { 
       mfield->//??? I'm dead 
      } 
     } 
    }

私のコードです。 。

ヘルプの任意の種類は認識されるであろう:)

おかげで、本質的にArはMYSQL_ROWオブジェクトを返すmysql_fetch_rowのMySQL CのAPI、で

答えて

13

を現在の行の値の線。プログラムの中で "mytable SELECT * FROM" を実行していない、いっそ

mysql_query(sqlhnd, "SELECT * FROM `my_table`"); 
MYSQL_RES *confres = mysql_store_result(sqlhnd); 
int totalrows = mysql_num_rows(confres); 
int numfields = mysql_num_fields(confres); 
MYSQL_FIELD *mfield; 

while((row = mysql_fetch_row(confres))) 
{ 
    for(i = 0; i < numfields; i++) 
    { 
     char *val = row[i]; 
     // do something with val... 
    } 
} 

だから、あなたのコードは次のようになります。予想されるフィールドに名前を付けるほうがはるかに優れているので、返されるフィールドの順序を確認することができます。

+0

どうもありがとうございました^ ______ ^それはあなたの変数名での省略形「confに」立つんどのような私の問題を解決し –

+0

: これは、いくつかのサンプルコードですか? –

+3

これはメモリをリークします。 msgstr "" "結果セットの処理が終わったら、mysql_free_result()も呼び出す必要があります。" https://dev.mysql.com/doc/refman/5.7/en/mysql-store-result.html https://dev.mysql.com/doc/refman/5.7/en/c-api-functionも参照してください。 -overview.html –

4

C++を使用している場合はなぜMySQL++を使用しないのですか?

mysqlpp::Connection dbconnection; 
dbconnection.connect("database", "server", "user", "pass"); 

mysqlpp::Query prepared_query = dbconnection.query("SELECT * FROM `my_table`"); 

mysqlpp::StoreQueryResult r = prepared_query.store(); 

int field = r.field_num("columntobefetched"); 

for(mysqlpp::StoreQueryResult::iterator i = r.begin(); i!=r.end();i++) 
{ 
     std::cout << i->at(field) << std::endl; 
     std::cout << (*i)["columntobefetched"] << std::endl; // this will be slower 
} 
+2

また、(デフォルトで)何かが失敗した場合、C++コネクタコードは例外をスローします。あなたのサンプルのCコードは_at all_を処理するエラーがないので、その機能に興味があるかもしれません。 – VolkerK

+0

まあまもなくMySQL ++を試してみます。提案をありがとう –

+0

Nit: "columntobefetched"の前後に二重引用符が必要です –

関連する問題