Ошибка отказа доступа в C и MySql в Ubuntu - PullRequest
1 голос
/ 09 мая 2011

Привет Я пытаюсь подключить MySql с помощью C в моем проекте, и я впервые использую 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' (с использованием пароля: ДА)

#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, чтобы получить исполняемый файл и запустить его в командной строке. Заранее спасибо.

Kevin

Ответы [ 2 ]

1 голос
/ 09 мая 2011

Привет, Саймон и Девёш, спасибо за помощь.Я обнаружил проблему ._ Пароль имени глобальной переменной совпадает с паролем имени параметра в функции saveUser _ .Большое спасибо и очень жаль беспокоить вас.

Кевин

1 голос
/ 09 мая 2011

я прочитал ваше сообщение, это не проблема с вашим кодом, попробуйте подключиться к серверу mysql с параметрами (имя пользователя и пароль), используя клиентское программное обеспечение mysql, такое как браузер запросов mysql или sql yog или phpmyadmin, независимо от того.

Я думаю, вы установили пустой пароль, поэтому просто замените строку

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

до

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

также убедитесь, что вы передаете параметры в правильном регистре, поскольку поведение ubuntu чувствительно к регистру

попробуй, если поможет.

проверьте правильность имени пользователя и паролей. обычно, когда вы устанавливаете сервер MySQL, он запрашивает пароль и пользователя, которые будут установлены. поскольку вы используете Ubuntu, вы можете использовать сервер ламп, поэтому попробуйте получить правильные учетные данные

там только проблема с вашими учетными данными

...