用户可以通过PDO连接,但不能通过C mysql_real_connect

时间:2016-07-29 16:32:13

标签: mysql c

我在本地计算机上管理一个MySQL数据库,并通过运行以下程序通过C连接到它:

#include <stdio.h>
#include <stdlib.h>

#include <mysql/mysql.h>

int main(int argc, char** argv ) {
    my_init();

    printf("MySQL client version: %s\n", mysql_get_client_info());

    MYSQL mysql;

printf( "%p\n", &mysql );

    MYSQL* mysql_initiate = mysql_init(&mysql);

printf( "%p\n", mysql_initiate );

    MYSQL* attempt = mysql_real_connect(&mysql, "localhost","User","********","DB",0,NULL,0);

printf( "%p\n", attempt );

    if(attempt != NULL) {
        printf("OK\n");
    }
    else {
        printf("Error: %s\n", mysql_error(&mysql));
    }

    mysql_close(&mysql);

    return 0;
}

它由以下命令编译:

gcc -c `mysql_config --cflags` main.c
gcc -o a.run main.o `mysql_config --libs`

mysql_config --cflags输出

的位置
-I/usr/include/mysql -DBIG_JOINS=1  -fno-strict-aliasing    -g -DNDEBUG

mysql_config --libs输出

-L/usr/lib/x86_64-linux-gnu -lmysqlclient -lpthread -lz -lm -ldl

程序编译正常,但执行时输出:

MySQL client version: 5.5.50
0x7fffcb8403e0
0x7fffcb8403e0
(nil)
Error: Access denied for user 'User'@'localhost' (using password: YES)

此当前主题的用户名,密码和数据库名称已更改。

PHP与名称和密码的实际三元组成功连接,因此用户的凭据不是问题的原因。我从PHP代码到C代码进行了简单的复制粘贴,字符串中没有任何不准确之处。

在以下情况下会出现同样的问题:

  • 尝试以root身份连接,
  • 尝试授予用户所有可能的权限,
  • 尝试使用测试用户,使用单字母密码授予所有权限
  • 已将变量mysqlmysql_initiate更改为blipblop(如果发生了一些神奇的未检测到的碰撞)。

当我运行可执行文件时启动Apache服务器,以证明我可以连接到phpmyadmin。我从phpmyadmin退出后尝试过,同样的问题。当我放置NULL端口"localhost"(它是3306告诉的MySQL端口)而不是{{1}时,我发出同样的问题netstat -natp而不是0 }}

为什么User可以通过PHP连接到数据库,为什么不能通过C连接到它?

我已经搜索过该问题但该主题没有任何内容。

gcc的版本是

gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4

我在Linux Mint 17 Qiana下运行。 MySQL通过XAMPP 7.0.6-0和数据库通过phpmyadmin管理,具有以下版本和配置(从phpmyadmin欢迎页面检索数据):

数据库服务器:

服务器:通过UNIX套接字的Localhost

服务器类型:MariaDB

服务器版本:10.1.13-MariaDB - 来源分发

协议版本:10

用户:root @ localhost

服务器字符集:UTF-8 Unicode(utf8)

网络服务器:

Apache / 2.4.18(Unix)OpenSSL / 1.0.2h PHP / 7.0.6 mod_perl / 2.0.8-dev Perl / v5.16.3

数据库客户端版本:libmysql - mysqlnd 5.0.12-dev - 20150407

PHP扩展:mysqli

PHP版本:7.0.6

我被困在墙上,任何帮助表示赞赏。

如果您需要一些额外的信息,请随时询问。

提前致谢。

1 个答案:

答案 0 :(得分:0)

事先我已经浏览了类似的问题,并了解到其他一些用户通过删除XAMPP解决了他们的问题。我不知道这也是我的情况。我想在尝试其他事情之前尝试其他事情。

我读过一些关于设置/更改root密码的XAMPP脚本已被弃用。

我已经摆脱了XAMPP。当谈到MySQL用户及其权利时,XAMPP会以某种方式破坏MySQL数据库。

另外我已经卸载了mysql,apache等,然后重新安装它们&#34;手动&#34;。它有效。

我现在才进入该页面:

https://community.apachefriends.org/f/viewtopic.php?f=16&t=72519

也许它会解决我的问题,也许不会。无论如何,我不建议再使用XAMPP了。