else if (strcmp(action, “7”) == 0) {
int jingpin_id;
char new_price[20];
// 解析参数(格式:"7 竞品编号 金额")
if (sscanf(buffer, "%*s %d %19s", &jingpin_id, new_price) != 2) {
send(connfd, msg20, strlen(msg20), 0); // 自动计算长度
return 0;
}
// 开启事务保证原子性
sqlite3_exec(db, "BEGIN TRANSACTION", 0, 0, 0);
int transaction_active = 1;
// 检查竞拍品状态
const char *check_sql = "SELECT qipaijia, zuigaojia, maijia FROM jingpin WHERE bianhao = ?;";
sqlite3_stmt *check_stmt = NULL;
sqlite3_stmt *update_stmt = NULL;
sqlite3_stmt *log_stmt = NULL;
rc = sqlite3_prepare_v2(db, check_sql, -1, &check_stmt, NULL);
if (rc != SQLITE_OK || sqlite3_bind_int(check_stmt, 1, jingpin_id) != SQLITE_OK) {
send(connfd, msg21, strlen(msg21), 0); // 自动计算长度
goto rollback;
}
if (sqlite3_step(check_stmt) != SQLITE_ROW) {
send(connfd, msg22, strlen(msg22), 0); // 自动计算长度
goto cleanup;
}
const unsigned char *qipaijia_str = sqlite3_column_text(check_stmt, 0);
const unsigned char *zuigaojia_str = sqlite3_column_text(check_stmt, 1);
double qipaijia = atof((const char*)qipaijia_str); // 字符串转数值
double current_max = atof((const char*)zuigaojia_str);
int maijia_status = sqlite3_column_type(check_stmt, 2);
// 验证逻辑
if (maijia_status != SQLITE_NULL) {
send(connfd, msg23, strlen(msg23), 0); // 自动计算长度
goto rollback;
}
double effective_max = (current_max > 0) ? current_max : qipaijia;
double new_price_val = atof(new_price); // 转换用户输入的金额
if (new_price_val <= effective_max) {
send(connfd, msg24, strlen(msg24), 0); // 自动计算长度
goto cleanup;
}
// 更新最高价
const char *update_sql = "UPDATE jingpin SET zuigaojia = ? WHERE bianhao = ?;";
if (sqlite3_prepare_v2(db, update_sql, -1, &update_stmt, NULL) != SQLITE_OK ||
sqlite3_bind_text(update_stmt, 1, new_price, -1, SQLITE_STATIC) != SQLITE_OK ||
sqlite3_bind_int(update_stmt, 2, jingpin_id) != SQLITE_OK) {
send(connfd, msg25, strlen(msg25), 0); // 自动计算长度
goto rollback;
}
if (sqlite3_step(update_stmt) != SQLITE_DONE) {
send(connfd, msg25, strlen(msg25), 0); // 自动计算长度
goto rollback;
}
// 记录出价历史
const char *log_sql = "INSERT INTO chujia (jingpin_id, user_id, price) VALUES (?, ?, ?);";
if (sqlite3_prepare_v2(db, log_sql, -1, &log_stmt, NULL) != SQLITE_OK ||
sqlite3_bind_int(log_stmt, 1, jingpin_id) != SQLITE_OK ||
sqlite3_bind_int(log_stmt, 2, c->user_id) != SQLITE_OK ||
sqlite3_bind_double(log_stmt, 3, new_price_val) != SQLITE_OK) {
send(connfd, msg26, strlen(msg26), 0); // 自动计算长度
goto rollback;
}
if (sqlite3_step(log_stmt) != SQLITE_DONE) {
send(connfd, msg26, strlen(msg26), 0); // 自动计算长度
goto rollback;
}
// 提交事务
sqlite3_exec(db, "COMMIT", 0, 0, 0);
transaction_active = 0;
send(connfd, msg27, strlen(msg27), 0); // 自动计算长度
cleanup:
if (check_stmt)
sqlite3_finalize(check_stmt);
if (update_stmt)
sqlite3_finalize(update_stmt);
if (log_stmt)
sqlite3_finalize(log_stmt);
return 0; // 返回统一状态码
rollback:
if (transaction_active) {
sqlite3_exec(db, “ROLLBACK”, 0, 0, 0);
}
goto cleanup;
}
else
{
send(connfd, msg5, strlen(msg5), 0);
}
}该段代码没有创建chujia表,是否错误
最新发布