(已解決) C與MySQL資料庫的問題 [論壇 - Ubuntu 程式設計]


正在瀏覽:   1 名遊客


 到底部   前一個主題   下一個主題  [無發表權] 請登錄或者註冊



(已解決) C與MySQL資料庫的問題
會員二級
註冊日期:
2012/6/27 20:43
所屬群組:
已註冊使用者
等級: 8
HP : 0 / 176
MP : 27 / 3846
EXP: 6
離線
各位大大好~

小弟最近想把一些PHP Code改成 C

而大多的Code都是跟資料庫存取有關

以下小弟有幾個問題想請教各位大大:

1.方法一:gcc -o test -I/usr/include/mysql -L/usr/lib/mysql -lmysqlclient test.c -lz

方法一是小弟在書上及網路上看到的編譯方法

但小弟按照上面的方式編譯都會出現如下的error:

undefined reference to `mysql_init'
undefined reference to `mysql_real_connect'
undefined reference to `mysql_query'
undefined reference to `mysql_query'
undefined reference to `mysql_store_result'
undefined reference to `mysql_num_rows'
undefined reference to `mysql_free_result'
undefined reference to `mysql_close'

後來Google了一下這些error發現有其他人提供的解決方式是改成

方法二:gcc -o test test.c -Wall `mysql_config --cflags --libs`

想請教各位大大 為什麼方法一不行 而方法二可以?

方法一跟方法二各代表的意思是什麼?

另外,方法二的`改成'或"都不能執行,為什麼是用`這個符號呢?


2.fprintf (stderr,"connection error!!\n");

許多sample code中 當程式與資料庫連結產生錯誤時

都會寫這一行

所以 我故意在code當中讓程式與資料庫連結時產生錯誤

想請教各位大大

fprintf這個function應該是把"connection error!!\n"寫入某個檔案中,對吧?

為什麼"connection error!!\n"會印在我的terminal上呢?

是因為我沒有開檔指定要他寫在哪一個檔案裡所以他才會print在螢幕上嗎?


3.在C裡面好像沒有類似PHP的mysql_fetch_array()這樣的function

所以要取資料 是不是只能透過mysql_fetch_row()來取?


麻煩各位大大解惑了~<(_ _)>

2013/2/28 2:15
應用擴展 工具箱
回覆: C與MySQL資料庫的問題
會員三級
註冊日期:
2011/11/13 1:05
所屬群組:
已註冊使用者
等級: 12
HP : 0 / 286
MP : 60 / 6763
EXP: 47
離線

2013/2/28 2:41
應用擴展 工具箱
回覆: C與MySQL資料庫的問題
管理員
註冊日期:
2011/3/11 6:32
所屬群組:
討論區管理群
等級: 44
HP : 216 / 1084
MP : 1088 / 27724
EXP: 38
離線
迷途小書僮 寫到:
1.方法一:gcc -o test -I/usr/include/mysql -L/usr/lib/mysql -lmysqlclient test.c -lz

方法一是小弟在書上及網路上看到的編譯方法
但小弟按照上面的方式編譯都會出現如下的error:

undefined reference to `mysql_init'
undefined reference to `mysql_real_connect'
undefined reference to `mysql_query'
undefined reference to `mysql_query'
undefined reference to `mysql_store_result'
undefined reference to `mysql_num_rows'
undefined reference to `mysql_free_result'
undefined reference to `mysql_close'

後來Google了一下這些error發現有其他人提供的解決方式是改成

方法二:gcc -o test test.c -Wall `mysql_config --cflags --libs`

想請教各位大大 為什麼方法一不行 而方法二可以?

undefined reference to XXXX 是 linker 找不到正確的函式庫的錯誤訊息
函式庫的配置每個 Linux 散佈版每個版本不一定會相同
請學習該散佈版適當的配置方式

迷途小書僮 寫到:
方法一跟方法二各代表的意思是什麼?

gcc 的參數請參考 gcc 的使用手冊
至於方法二您直接於終端機中執行
mysql_config --cflags --libs
應該就知道了

迷途小書僮 寫到:
另外,方法二的`改成'或"都不能執行,為什麼是用`這個符號呢?

因為語法就是這樣子
另外 bash 下比較標準的執行語法是 $(「命令」)

迷途小書僮 寫到:
fprintf這個function應該是把"connection error!!\n"寫入某個檔案中,對吧?

為什麼"connection error!!\n"會印在我的terminal上呢?

是因為我沒有開檔指定要他寫在哪一個檔案裡所以他才會print在螢幕上嗎?

= = 請查閱標準 C fprintf 函式的參考資料
如果有安裝說明文件軟體包的話可以執行
man 3 fprintf
命令察看

迷途小書僮 寫到:
3.在C裡面好像沒有類似PHP的mysql_fetch_array()這樣的function

所以要取資料 是不是只能透過mysql_fetch_row()來取?

ODBC 提供了什麼介面就只能用什麼介面,沒得選

2013/3/1 2:59
本篇發表文章以「創用CC BY 3.0 或更新之台灣地區版本」授權條款釋出,如何使用敬請參考
 Creative Commons — 姓名標示 3.0 台灣 — CC BY 3.0 TW
 http://creativecommons.org/licenses/by/3.0/tw/

「你不懂的東西就不要亂講,被懂得人看破手腳就算了,騙不懂的人誤導別人,還要別人把你當成大師,這就真的是說不過去了。」
 by Allen Own
 出處 http://www.plurk.com/p/i4uogm

自由知識創作平台介紹
 https://docs.google.com/document/d/1MGG6lW_0qCgH4U785R-IwSc_INdoBGej1l-JxiA4gPE
如何建立新的自由知識創作平台文件
 https://docs.google.com/document/d/11NdzOW2lGYksfyQIcPMPye5tlmj1J0QTkgPTmQvIvKA
應用擴展 工具箱
回覆: C與MySQL資料庫的問題
會員二級
註冊日期:
2012/6/27 20:43
所屬群組:
已註冊使用者
等級: 8
HP : 0 / 176
MP : 27 / 3846
EXP: 6
離線
感謝兩位大大的幫忙!!

小弟受惠了~<(_ _)>

2013/3/1 11:42
應用擴展 工具箱


 [無發表權] 請登錄或者註冊


可以查看帖子.
不可發帖.
不可回覆.
不可編輯自己的帖子.
不可刪除自己的帖子.
不可發起投票調查.
不可在投票調查中投票.
不可上傳附件.
不可不經審核直接發帖.