在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