欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

mysql c 返回受影響行數(shù)-1

在使用mysql c語言庫進(jìn)行數(shù)據(jù)庫操作時(shí),我們通常會(huì)使用mysql_query函數(shù)來執(zhí)行sql語句。而在執(zhí)行成功后,我們可以通過mysql_affected_rows函數(shù)來獲取受影響的行數(shù)。

然而,有時(shí)候我們會(huì)發(fā)現(xiàn),在執(zhí)行一些語句(如插入、刪除、更新等操作)后,mysql_affected_rows函數(shù)返回的值為-1,而不是我們期望的受影響行數(shù)。這是為什么呢?

MYSQL *conn;
conn = mysql_init(NULL); // 初始化數(shù)據(jù)庫連接
// 連接數(shù)據(jù)庫
if (mysql_real_connect(conn, host, user, pass, db, port, NULL, 0) == NULL) {
printf("Failed to connect to database: %s\n", mysql_error(conn));
mysql_close(conn);
return -1;
} 
// 執(zhí)行插入語句
char *sql = "INSERT INTO users (name, age, gender) VALUES ('Mike', 20, 'male')";
if (mysql_query(conn, sql) != 0) {
printf("Failed to insert data: %s\n", mysql_error(conn));
mysql_close(conn);
return -1;
}
int rows = mysql_affected_rows(conn);
printf("Affected rows: %d\n", rows); // 輸出-1

這個(gè)問題出現(xiàn)的原因是,當(dāng)執(zhí)行一些語句后,受影響行數(shù)可能會(huì)為0,而mysql_affected_rows函數(shù)在這種情況下會(huì)返回-1。如果我們想獲取到具體的受影響行數(shù),可以通過執(zhí)行"SELECT ROW_COUNT()"語句,該語句會(huì)返回上一次操作受影響的行數(shù)。

char *sql = "INSERT INTO users (name, age, gender) VALUES ('Mike', 20, 'male')";
if (mysql_query(conn, sql) != 0) {
printf("Failed to insert data: %s\n", mysql_error(conn));
mysql_close(conn);
return -1;
}
if (mysql_query(conn, "SELECT ROW_COUNT()") != 0) {
printf("Failed to get affected rows: %s\n", mysql_error(conn));
mysql_close(conn);
return -1;
}
MYSQL_RES *result = mysql_store_result(conn);
MYSQL_ROW row = mysql_fetch_row(result);
int rows = atoi(row[0]);
mysql_free_result(result);
printf("Affected rows: %d\n", rows); // 輸出具體的受影響行數(shù)

通過以上方法,我們就可以避免由于受影響行數(shù)為0而導(dǎo)致mysql_affected_rows返回-1的問題。