INCLUDE = /usr/include/mysql/
LIBS = /usr/lib/mysql
all:
gcc -I$(INCLUDE) -L$(LIBS) -lmysqlclient xxx.c -o xxx
clean:
rm -f xxx
| 安裝方式 | INCLUDE | LIBS |
|---|---|---|
| 默認安裝 | /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
→ SQL 語法錯誤,檢查列名拼寫、表結構是否匹配。
錯誤代碼:
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); // 釋放
→ 除零錯誤,檢查除數是否為零後再運算。
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