mysql - Ubuntu 上 C 和 MySql 中的访问拒绝错误

标签 mysql c ubuntu access-denied

嗨 我正在尝试在我的项目中使用 C 连接 MySql,这是我第一次使用 C 和 MySql。 我尝试在 MySql 中保存用户名、密码和角色。当我像那样运行程序时就可以了。

 #include <mysql.h>
 #include <stdio.h>

 main() {
MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;

char *server = "localhost";
char *user = "root";
char *password = "admin"; /* set me first */
char *database = "profile";
char query[500];
memset(query,0,500);
conn = mysql_init(NULL);

/* Connect to database */
if (!mysql_real_connect(conn, server,
     user, password, database, 0, NULL, 0)) {
  fprintf(stderr, "%s\n", mysql_error(conn));
  exit(1);
}
int i =2;
/* send SQL query */
char userName[45] ="hi";
char userPassword[45];
char role[45];
strcpy(userName,"koko");
strcpy(userPassword,"hi");
strcpy(role,"admin");

sprintf(query,"insert into userTbl(name,password,role) values (\'%s\',\'%s\',\'%s\'); ",userName,userPassword,role);

if (mysql_query(conn, query)) {
  fprintf(stderr, "%s\n", mysql_error(conn));
  exit(2);
}


/* close connection */
mysql_close(conn);
}

尽管有一些警告,但我可以毫无错误地运行它。 但是当我使用函数编写这个程序时,我在编译时遇到了这个错误。 拒绝用户 'root'@'localhost' 的访问(使用密码:YES)

#include <mysql.h>
#include <stdio.h>


MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;

char *server = "localhost";
char *user = "root";
char *password = "admin"; /* set me first */
char *database = "profile";
void saveUser(char * , char * ,char * );
void updateUser(char * , char * ,char * );
void showData();
main() 
{
saveUser("kevin","hi","admin");
}

void saveUser(char *name, char *password,char *role)
{

char  query[500];
memset(query,0,500);
conn = mysql_init(NULL);
/* Connect to database */
if (!mysql_real_connect(conn, server,
     user, password, database, 0, NULL, 0)) {
  fprintf(stderr, "%s\n", mysql_error(conn));
  exit(1);
}
int i =2;
/* send SQL query */
sprintf(query,"insert into userTbl(name,password,role) values (\'%s\',\'%s\',\'%s\'); ",name,password,role);
if (mysql_query(conn, query)) {
  fprintf(stderr, "%s\n", mysql_error(conn));
  exit(2);
}

res = mysql_use_result(conn);



/* close connection */
mysql_free_result(res);
mysql_close(conn);
}

void updateUser(char *name, char *password,char *role)
{

char  query[500];
memset(query,0,500);
conn = mysql_init(NULL);

/* Connect to database */
if (!mysql_real_connect(conn, server,
     user, password, database, 0, NULL, 0)) {
  printf("1234511\n");
  fprintf(stderr, "%s\n", mysql_error(conn));
  exit(1);
}
int i =2;
/* send SQL query */
sprintf(query,"update userTbl set password=\'%s\',role=\'%s\' where name=\'%s\'; ",password,role,name);
if (mysql_query(conn, query)) {
  fprintf(stderr, "%s\n", mysql_error(conn));
  exit(2);
}


/* close connection */
mysql_close(conn);
}

void showData()
{
/* output table name */
system("clear");
printf("MySQL Tables in mysql database:\n");
while ((row = mysql_fetch_row(res)) != NULL)
  printf("%s \n", row[0]);
}

谁能解释一下我哪里出错了,我该如何改正。 我使用 gcc 获取可执行文件并在命令提示符下运行它。 提前致谢。

凯文

最佳答案

我认为您将密码设置为空白,所以只需替换该行

saveUser("kevin","hi","admin");

saveUser("kevin","","admin");

还要确保您以正确的大小写传递参数,因为 ubuntu 的行为是区分大小写的

如果有帮助,请尝试一下。

请检查您的用户名和密码是否正确。通常当你安装 mysql 服务器时,它会要求设置密码和用户。当您使用 ubuntu 时,您可能正在使用灯服务器,因此请尝试获取正确的凭据

唯一的问题是你的凭据

关于mysql - Ubuntu 上 C 和 MySql 中的访问拒绝错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5934437/

相关文章:

MYSQL 内部连接三到四个表

php - PDO SQL - 插入数十个字段

c++ - 这个乘除函数正确吗?

ubuntu - ros旋律未满足的依赖关系

MYSQL 在 WHERE 子句中连接和比较?

mysql - (Spring) 使用数据库表执行授权

c - 为什么这会引入内存泄漏?

c - 有什么理由在 fgets+sscanf 上使用 scanf 或 fscanf

python - Crontab - Python 脚本运行,将输出发送到邮件,但不写入文件

java - 如何通过Java在Linux中执行decode -t 17?