在使用C語言連接MySQL數(shù)據(jù)庫時,我們經(jīng)常會使用mysql_query函數(shù)來執(zhí)行SQL語句。mysql_query函數(shù)的返回值對于判斷SQL語句的執(zhí)行情況非常重要。
unsigned long mysql_query(MYSQL *mysql, const char *query);
mysql_query函數(shù)接收兩個參數(shù):指向MYSQL結(jié)構(gòu)體的指針和需要執(zhí)行的SQL語句,返回一個無符號長整型。
當(dāng)mysql_query返回值為0時,表示SQL語句執(zhí)行成功。此時我們可以通過mysql_affected_rows函數(shù)獲取受影響的行數(shù)。
mysql_query(mysql, "UPDATE table SET name='Tom' WHERE id=1;"); if(mysql_query(mysql, "UPDATE table SET name='Tom' WHERE id=1;") == 0) { printf("Update success! %d rows affected.\n", mysql_affected_rows()); } else { printf("Error: %s\n", mysql_error(mysql)); }
當(dāng)mysql_query返回值不為0時,表示SQL語句執(zhí)行失敗。我們可以通過mysql_error函數(shù)獲取失敗的原因。
if(mysql_query(mysql, "SELECT * FROM non_exist_table;") != 0) { printf("Error: %s\n", mysql_error(mysql)); }
需要注意的是,mysql_query函數(shù)只能執(zhí)行一條SQL語句,它不能執(zhí)行多個SQL語句的組合(如SELECT和INSERT同時執(zhí)行)。如果需要執(zhí)行多個SQL語句的組合,可以使用mysql_multi_query函數(shù)。
mysql_query(mysql, "SELECT * FROM table1; INSERT INTO table2 VALUES('value')"); /* 錯誤示例:mysql_query函數(shù)只執(zhí)行了SELECT語句,INSERT語句未執(zhí)行。 */ mysql_multi_query(mysql, "SELECT * FROM table1; INSERT INTO table2 VALUES('value')"); /* 正確示例:mysql_multi_query函數(shù)可以執(zhí)行多個SQL語句的組合。 */
總之,在使用mysql_query函數(shù)時,需要根據(jù)返回值來判斷SQL語句的執(zhí)行情況,合理地處理成功和失敗的情況。