在C此代碼失敗:Fedora Linux系統環境下,選擇失敗在MySQL
result = mysql_query(conn, "select username from golfer");
然而,先前執行MySQL_init
和mysql_real_connect
成功的作品。
代碼沒有問題,它連接到不同的服務器時可以很好地工作。我可以成功地從終端執行失敗的查詢,即
MySQL> select username from golfer;
所有查詢工作的偉大,只要我從終端執行它們。所以看起來數據庫設置正確。我檢查了以下內容:
- table db db中的用戶MySQL顯示正確的用戶名和主機。在分貝的MySQL
- 表用戶顯示本地主機,正確的用戶,正確的密碼,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聯網。
我歡迎任何有見地的評論。 謝謝 -
感謝回覆,MQSQL版本和數據庫引擎一樣。也是爲了響應SnakeDoc,感謝回覆,但問題不在代碼中。這可能是在權限中的東西。我儘量提供儘可能多的信息,以避免看到我已經看過的東西的建議 - 從而避免在這個論壇中來回拼湊。如果這不起作用,那我的運氣就不好。 – DundasDave
@ user3348464你應該檢查的第一件事是你失敗時得到的錯誤消息,並用它更新你的問題。現在你告訴我們查詢失敗了,但是你沒有告訴我們確切的錯誤信息是什麼,這對於告訴你如何解決或者問題在哪裏至關重要。 – Prix
從適當的意義上說,從命令行執行查詢與執行代碼時有什麼不同? – DundasDave