0
while ((row = mysql_fetch_row(res)) != NULL) {

    sprintf(statement, "DELETE FROM `outgoing` WHERE `outgoing`.`id`=%s", row[0]);

    if (mysql_query(conn, statement)) {
        fprintf(stderr, "%s\n", mysql_error(conn));    
    }
}

Commands out of sync; you can't run this command nowエラーが発生しています

4

2 に答える 2

0

おそらくmysql_use_result()関数を使用して、MySQL データベースから結果を取得します。その場合、mysql_fetch_row()が呼び出されると、行が 1 つずつクライアントに送信されます。すべての行がフェッチされるまで、データベース ハンドルは「ロック」されます。

を使用する場合は、NULL 値が返されるまでmysql_use_result()実行する必要がありmysql_fetch_row() ます。そうしないと、フェッチされなかった行が次のクエリの結果セットの一部として返されます。Commands out of sync; you can't run this command now これを忘れると、C API でエラーが発生します。

mysql_store_result()代替品としてお試しください。その関数は、すべての行を一度にフェッチします。

于 2016-03-24T11:58:21.293 に答える
-1

正しいステートメントは次のとおりです。

sprintf(statement, "DELETE FROM outgoing WHERE outgoing.id='%s'", row[0]);

の周りの正しい引用符に%s注意してください。他のものは値ではなく名前であるため、引用符は必要ありません。

于 2016-03-24T09:45:45.390 に答える