2014-02-24 33 views
0

在C此代碼失敗:Fedora Linux系統環境下,選擇失敗在MySQL

result = mysql_query(conn, "select username from golfer"); 

然而,先前執行MySQL_initmysql_real_connect成功的作品。

代碼沒有問題,它連接到不同的服務器時可以很好地工作。我可以成功地從終端執行失敗的查詢,即

MySQL> select username from golfer; 

所有查詢工作的偉大,只要我從終端執行它們。所以看起來數據庫設置正確。我檢查了以下內容:

  1. table db db中的用戶MySQL顯示正確的用戶名和主機。在分貝的MySQL
  2. 表用戶顯示本地主機,正確的用戶,正確的密碼,Select_priv = Y.

在數據的基礎上的MySQL,表格分貝,主機表-PRIV和列PRIV是在兩個服務器相同。但是,當連接到一臺服務器而不是另一臺服務器時,代碼失敗。

我不知道返回的錯誤代碼,因爲它需要花費大量精力才能得到它。因此,有沒有其他的權限,不管我應該看的是什麼?

這是5年前一直運行良好的代碼。嘗試移植到新的服務器。我看着用戶名@主機的撥款,它說:

grant all privileges on 'correct database'.* to correct 'username'@'localhost' 

所以,這看起來對我來說很合適。

編輯: 我想從失敗的MYSQL查詢中獲取錯誤代碼。代碼如下:

#define CANNOT_CONNECT 2 

MYSQL *conn; 
char *server = "localhost"; 
char *user = "myname"; 
char *password = ""; 
char *database = "golfprob"; 
int result = 10; 
int error_num = 0; 
int no_char; 
char insert[70]; 

freopen("home/Dave/stderr.log", "w", stderr); 
conn = mysql_init(NULL); 

if (!mysql_real_connect(conn,server,user,password,0,NULL,0)) 
    return(CANNOT_CONNECT);    

noChar = sprintf(insert, "select username, password from golfer"); 
result = mysql_query(conn, insert); 

if (result != 0) 
{ 
    error_num = mysql_errno(conn); 
    fprintf(stderr, "Query Failed: Error: %s\n", mysql_error(conn)); 
    fclose(stderr); 
    mysqlL_close(conn); 

    return(error_num); 
} 

查詢失敗。 執行時,error_num = 3這不是有效的MySQL錯誤代碼。 stderr上沒有輸出。我不確定顯示的是什麼,或者在這種情況下stderr是否有意義。

正如您所蒐集的,我試圖將文本中的錯誤寫入文件。 沒有文件被寫入任何地方。請教我爲什麼。

環境的重要方面: 代碼在Apache網絡服務器中執行/ var/www/cgi-bin 代碼由網頁上的條目觸發,MS IE爲瀏覽器。 計算機通過Intranet聯網。

我歡迎任何有見地的評論。 謝謝 -

+0

感謝回覆,MQSQL版本和數據庫引擎一樣。也是爲了響應SnakeDoc,感謝回覆,但問題不在代碼中。這可能是在權限中的東西。我儘量提供儘可能多的信息,以避免看到我已經看過的東西的建議 - 從而避免在這個論壇中來回拼湊。如果這不起作用,那我的運氣就不好。 – DundasDave

+0

@ user3348464你應該檢查的第一件事是你失敗時得到的錯誤消息,並用它更新你的問題。現在你告訴我們查詢失敗了,但是你沒有告訴我們確切的錯誤信息是什麼,這對於告訴你如何解決或者問題在哪裏至關重要。 – Prix

+0

從適當的意義上說,從命令行執行查詢與執行代碼時有什麼不同? – DundasDave

回答

0

問題解決:請參閱與問題一起發表的評論。 (很明顯,我不知道如何使用這個論壇)。