【发布时间】:2014-02-24 21:54:37
【问题描述】:
在 c 中此代码失败:
result = mysql_query(conn, "select username from golfer");
但是,之前执行的MySQL_init 和mysql_real_connect 成功运行。
代码没有任何问题,在连接到不同的服务器时可以完美运行。我可以从终端成功执行失败的查询,即
MySQL> select username from golfer;
只要我从终端执行它们,所有查询都可以正常工作。所以看起来数据库设置正确。我检查了以下内容:
- db MySQL 中的表用户显示正确的用户名和主机。
- db MySQL 中的表用户显示 localhost、正确的用户、正确的密码和 Select_priv = Y。
在数据库 MySQL 中,两个服务器中的表 db、host、tables-priv 和 column-priv 是相同的。但是当连接到一台服务器而不是另一台时,代码会失败。
我不知道返回的错误代码,因为要获得它需要付出很大的努力。因此,我应该查看任何其他权限吗?
这是 5 年前运行良好的代码。尝试移植到新服务器。我查看了 username@host 的授权,它说:
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 或 stderr 在这种情况下是否有意义。
正如您所收集的,我正在尝试将错误以文本形式写入文件。 没有文件被写入任何地方。请告诉我为什么。
环境的重要方面: 代码在 apache Web 服务器中的 /var/www/cgi-bin 外执行 代码由网页上的条目触发,MS IE 是浏览器。 计算机通过 Intranet 联网。
我欢迎任何有见地的 cmets。 谢谢--
【问题讨论】:
-
感谢您的回复,MQSQL 版本和数据库引擎一样。同样作为对 SnakeDoc 的回应,感谢您的回复,但问题不在代码中。这可能是权限中的内容。我试图提供尽可能多的信息,以避免收到关于我已经看过的东西的建议——从而避免在这个论坛中来回进行tic-tacking。如果这不起作用,那我就不走运了。
-
@user3348464 您应该检查的第一件事是失败时收到的错误消息,并用它更新您的问题。现在您告诉我们查询失败,但您没有告诉我们确切的错误消息是什么,这对于告诉您如何解决或问题出在哪里至关重要。
-
在适当的意义上,从命令行执行查询与从代码执行查询有什么不同?
-
取决于应用程序从哪里运行,是否使用套接字或其他连接方式等。运行应用程序时得到的 MySQL 错误代码和消息是什么?
-
我认为@EoiFirst 实际上是指正在运行的实际查询。例如,在 java 中,
PreparedStatement不喜欢终止;在查询字符串中......但Statement确实更喜欢它。