【问题标题】:fedora linux environment, select fails in mysqlfedora linux环境,mysql中选择失败
【发布时间】:2014-02-24 21:54:37
【问题描述】:

在 c 中此代码失败:

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

但是,之前执行的MySQL_initmysql_real_connect 成功运行。

代码没有任何问题,在连接到不同的服务器时可以完美运行。我可以从终端成功执行失败的查询,即

MySQL> select username from golfer;

只要我从终端执行它们,所有查询都可以正常工作。所以看起来数据库设置正确。我检查了以下内容:

  1. db MySQL 中的表用户显示正确的用户名和主机。
  2. 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 确实更喜欢它。

标签: mysql c linux


【解决方案1】:

问题已解决:请参阅随问题发布的 cmets。 (很明显我不知道如何使用这个论坛)。

【讨论】:

    猜你喜欢
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    • 2015-08-04
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多