2014-02-24 32 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

问题解决:请参阅与问题一起发表的评论。 (很明显,我不知道如何使用这个论坛)。