7

更新クエリを使用して mysql に接続し、mysql C API を使用して C プログラムを実行しようとしていますが、コンパイル エラーやリンク エラーは発生しませんが、db テーブルで行が更新されません。

このコードを実行すると、空の値が emp で更新されます。ステータス フィールド

#define STRING_SIZE 256

char* eStatus,myeStatus;

int myempid,empid;


int i;
for(i = 0; i < 5 ; i++){
const char* sqlQuery = "update employee_info set estatus = ? where empID = ?";
    if (mysql_stmt_prepare(stmt, sqlQuery, strlen(sqlQuery))) {
            fprintf(stderr, " mysql_stmt_prepare(), update failed\n");
            fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
            return -1;
          }

memset(param, 0, sizeof(param)); /* zero the structures */

if (info.state == 2)

      eStatus = "present";

else
      eStatus = "absent";

empid = i;
// Init param structure
            // Select
            param[0].buffer_type = MYSQL_TYPE_STRING;
            param[0].buffer = (void *) &eStatus;
            param[0].buffer_length = STRING_SIZE;
            param[0].is_null = 0;
            param[0].length = &str_length;

            param[1].buffer_type = MYSQL_TYPE_SHORT;
            param[1].buffer = (void *) &myempID;
            param[1].buffer_length = STRING_SIZE;

            param[1].is_null = 0;
            param[1].length = 0;

        myeStatus = eStatus;
    myempid = empid;
               if (mysql_stmt_bind_param(stmt, param) != 0) {
            fprintf(stderr, " mysql_stmt_bind_param() failed\n");
            fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
            return -1;
        }
               /* Execute the statement */
        if (mysql_stmt_execute(stmt)) {
            fprintf(stderr, " mysql_stmt_execute(), failed\n");
            fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
                return -1;
        }

} // end of for loop

mysql のテーブル スキーマ

エンピッド INT(11)

estatus varchar(10)

mysql テーブルでステータスが更新されない理由がわかりません。データ型の不一致ですか、それとも値が sqlquery に適切にバインドされていませんか?
どんな手掛かり?ありがとう。

4

2 に答える 2

1

あなたはここに見つけることができます:クエリを実行するために使用する方法の完全な例を使用して、シングルボードコンピューターから mysql データベースに書き込みMYSQL C APIます。それでも問題がある場合は、コード全体を投稿してください。

于 2012-09-05T22:02:05.223 に答える
0

なぜ「whereempID=?」を使おうとしているのですか。すべての従業員に対して実行する場合は、where句を省略してください。特定の従業員向けの場合は、彼のIDがそこにあるはずです。

もっと問題があるかもしれませんが、これは私が最初に見つけたものでした。

mysqlコマンドラインプロンプトで同じクエリを実行して確認することもできます。

編集:データベース接続が確立されておらず、それに関連する情報も表示されません。何かのようなもの

MYSQL *conn = mysql_init(NULL);

*conn = mysql_real_connect(*conn, DB_HOST, DB_USER, DB_PASS, DB_NAME, 0, NULL, flags);

if (*conn != NULL)
{
    printf("Connection Successfull\n");
    status = 0;
}
于 2012-09-05T18:52:06.730 に答える