首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C語言 MySQL 開發實戰筆記:編譯配置、常見錯誤與最佳實踐

     編輯:關於C

一、Makefile 標準模板


INCLUDE = /usr/include/mysql/
LIBS    = /usr/lib/mysql

all:
    gcc -I$(INCLUDE) -L$(LIBS) -lmysqlclient xxx.c -o xxx

clean:
    rm -f xxx

二、MySQL 安裝路徑差異配置

安裝方式INCLUDELIBS
默認安裝/usr/include/mysql/usr/lib/mysql
/usr/local/mysql/usr/local/mysql/include/mysql/usr/local/mysql/lib/mysql

動態庫鏈接修復

若報 libmysqlclient.so.16: cannot open shared object file:


ln -s /usr/local/mysql/lib/mysql/libmysqlclient.so.16 /usr/lib/libmysqlclient.so.16

三、高頻錯誤與解決方案

1. Unknown column 'opcode' in 'where clause'

→ SQL 語法錯誤,檢查列名拼寫、表結構是否匹配。

2. Commands out of sync

錯誤代碼:


mysql_real_query(mysql, sql, strlen(sql));
num = mysql_affected_rows(mysql);  // 錯誤:未獲取結果集

正確流程:


mysql_real_query(mysql, sql, strlen(sql));
MYSQL_RES *rs = mysql_store_result(mysql);  // 必須先存儲結果集
num = mysql_num_rows(rs);                   // 再獲取行數
mysql_free_result(rs);                      // 釋放

3. 浮點數例外

→ 除零錯誤,檢查除數是否為零後再運算。

四、核心操作代碼模板

查詢結果獲取


MYSQL *mysql;
MYSQL_RES *rs;
MYSQL_ROW row;

char *sql = "select uid, uname from users where uid=xxx";
mysql_real_query(mysql, sql, strlen(sql));
rs = mysql_store_result(mysql);

while ((row = mysql_fetch_row(rs))) {
    int uid = atoi(row[0]);
    char *uname = row[1];
    // 業務邏輯...
}
mysql_free_result(rs);

跨表數據複製


-- 先建好目標表結構
INSERT INTO new_table (col1, col2, col3)
SELECT col1, col2, col3 FROM old_table WHERE condition;

五、連接管理最佳實踐

  • 使用連接池避免頻繁建立/銷毀
  • 長連接需設置 mysql_options(..., MYSQL_OPT_RECONNECT, ...) 自動重連
  • 事務操作:mysql_autocommit(mysql, 0) 關閉自動提交,手動 commit/rollback
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved