• 0
Awiero527

[закрыто] Проблема подключения к БД через Denwer

Question

При попытке запустить сервер выдает в консоли

 

Спойлер

[MySQL] Error (0): Failed to connect. Access denied for user 'root'@'localhost' (using password: YES).
[MySQL] Error (0): Function: mysql_ping called when not connected to any database. Access denied for user 'root'@'localhost' (using password: YES)


//----------------БАЗА ДАННЫХ-------------------------
#define     MYSQL_HOST      "localhost"
#define     MYSQL_USER      "root"
#define     MYSQL_PASSWORD  ""
#define     MYSQL_BASE      "pleasurerp"
//----------------------------------------------------


OnGameUnit:


public OnGameModeInit()
{
	DisableInteriorEnterExits();
	EnableStuntBonusForAll(0);
	SetGameModeText("Pleasure RP");
	SendRconCommand("hostname "SERVER_NAME"");
	mysql_init();
	mysql_connects();
	AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);

	//============Пикапы===========
	vxodmerya = CreatePickup(1318, 23, 1481.0325,-1772.3140,18.7958,0);
	//=================================
	//==============Машины=============
	CreateVehicle(408, 1760.1957,-1898.3301,13.5626,270.0, 245, 0, 120, 0);
	//=================================
	return 1;
}



stock sendername(playerid)
{
	new novoeimya[MAX_PLAYER_NAME];
	GetPlayerName(playerid, novoeimya, sizeof(novoeimya));
	return novoeimya;
}
stock mysql_connects()
{
	dbHandle = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_BASE, MYSQL_PASSWORD);
	switch(mysql_ping())
	{
		case 1: print("??????????? ? ???? ?????? ????????? ??????");
		case -1: print("??????????? ? ???? ?????? ????????? ????????");
	}
}

 


Подмечу,что в павно не так давно,поэтому не сильно в нем разбираюсь  :sad:

Share this post


Link to post
Share on other sites

11 answers to this question

  • 0

Версия mysql какая?
Местами Base, Password поменяй попробуй. 
Локалка или хост?

Share this post


Link to post
Share on other sites
  • 0
1 час назад, keyl1337 сказал:

Версия mysql какая?
Местами Base, Password поменяй попробуй. 
Локалка или хост?

5.1

менял,ничего не изменилось

локалка

Share this post


Link to post
Share on other sites
  • 0

Попробуй в поле password ввести root.

Share this post


Link to post
Share on other sites
  • 0
mysql_init() - что это

Share this post


Link to post
Share on other sites
  • 0

@Awiero527, дайте-ка mysql.inc.

Share this post


Link to post
Share on other sites
  • 0
В 01.05.2020 в 08:08, povstanec сказал:

Попробуй в поле password ввести root.

Не помогло

 

23 часа назад, SCRIPTMAN сказал:

mysql_init() - что это

Без этой строчки сервер не запускается,а в логах пишет следующее:

[MySQL] Error (0): Function: mysql_connect failed, mysql was not initialized on this handle.

 

 

22 часа назад, odosenok сказал:

@Awiero527, дайте-ка mysql.inc.

Спойлер

/**
 *     SA:MP MySQL v2.1 Functions
 *  (c) Copyright 2011, StrickenKid
 *
 **/

#if defined __mysql_included
	#endinput
#endif

#define __mysql_included
#pragma library mysql

// plugin error id's

#define P_ERROR_NONE                                0
#define P_ERROR_INCPARAMCNT                         1
#define P_ERROR_INCVALUE                            2
#define P_ERROR_MAXCONN                             3
#define P_ERROR_DBNOCONN                            4
#define P_ERROR_NORES                               5
#define P_ERROR_RES                                 6
#define P_ERROR_NOFIELD                             7
#define P_ERROR_NOFIELDDATA                         8
#define P_ERROR_NOROWDATA                           9
#define P_ERROR_CANTALLOC                           10
#define P_ERROR_NOCALLBACK                          11
#define P_ERROR_NOQUERY                             12

// mysql headers defines

#define REFRESH_GRANT								1
#define REFRESH_LOG									2
#define REFRESH_TABLES								4
#define REFRESH_HOSTS								8
#define REFRESH_STATUS								16
#define REFRESH_THREADS								32
#define REFRESH_SLAVE   							64
#define REFRESH_MASTER 							 	128

// mysql error id's

#define CR_ERROR_FIRST  							2000
#define CR_UNKNOWN_ERROR							2000
#define CR_SOCKET_CREATE_ERROR						2001
#define CR_CONNECTION_ERROR							2002
#define CR_CONN_HOST_ERROR							2003
#define CR_IPSOCK_ERROR								2004
#define CR_UNKNOWN_HOST								2005
#define CR_SERVER_GONE_ERROR						2006
#define CR_VERSION_ERROR							2007
#define CR_OUT_OF_MEMORY							2008
#define CR_WRONG_HOST_INFO							2009
#define CR_LOCALHOST_CONNECTION 					2010
#define CR_TCP_CONNECTION							2011
#define CR_SERVER_HANDSHAKE_ERR 					2012
#define CR_SERVER_LOST								2013
#define CR_COMMANDS_OUT_OF_SYNC 					2014
#define CR_NAMEDPIPE_CONNECTION 					2015
#define CR_NAMEDPIPEWAIT_ERROR  					2016
#define CR_NAMEDPIPEOPEN_ERROR  					2017
#define CR_NAMEDPIPESETSTATE_ERROR 					2018
#define CR_CANT_READ_CHARSET						2019
#define CR_NET_PACKET_TOO_LARGE						2020
#define CR_EMBEDDED_CONNECTION						2021
#define CR_PROBE_SLAVE_STATUS   					2022
#define CR_PROBE_SLAVE_HOSTS    					2023
#define CR_PROBE_SLAVE_CONNECT  					2024
#define CR_PROBE_MASTER_CONNECT 					2025
#define CR_SSL_CONNECTION_ERROR 					2026
#define CR_MALFORMED_PACKET     					2027
#define CR_WRONG_LICENSE							2028
#define CR_NULL_POINTER								2029
#define CR_NO_PREPARE_STMT							2030
#define CR_PARAMS_NOT_BOUND							2031
#define CR_DATA_TRUNCATED							2032
#define CR_NO_PARAMETERS_EXISTS 					2033
#define CR_INVALID_PARAMETER_NO 					2034
#define CR_INVALID_BUFFER_USE						2035
#define CR_UNSUPPORTED_PARAM_TYPE 					2036
#define CR_SHARED_MEMORY_CONNECTION             	2037
#define CR_SHARED_MEMORY_CONNECT_REQUEST_ERROR 		2038
#define CR_SHARED_MEMORY_CONNECT_ANSWER_ERROR   	2039
#define CR_SHARED_MEMORY_CONNECT_FILE_MAP_ERROR 	2040
#define CR_SHARED_MEMORY_CONNECT_MAP_ERROR      	2041
#define CR_SHARED_MEMORY_FILE_MAP_ERROR         	2042
#define CR_SHARED_MEMORY_MAP_ERROR              	2043
#define CR_SHARED_MEMORY_EVENT_ERROR     			2044
#define CR_SHARED_MEMORY_CONNECT_ABANDONED_ERROR 	2045
#define CR_SHARED_MEMORY_CONNECT_SET_ERROR      	2046
#define CR_CONN_UNKNOW_PROTOCOL 					2047
#define CR_INVALID_CONN_HANDLE						2048
#define CR_SECURE_AUTH                          	2049
#define CR_FETCH_CANCELED                       	2050
#define CR_NO_DATA                              	2051
#define CR_NO_STMT_METADATA                     	2052
#define CR_NO_RESULT_SET                        	2053
#define CR_NOT_IMPLEMENTED                      	2054
#define CR_SERVER_LOST_EXTENDED						2055
#define CR_STMT_CLOSED								2056
#define CR_NEW_STMT_METADATA                    	2057
#define CR_ERROR_LAST                      			2057

// logging types

#define INVALID_MYSQL_ID							(-1)
#define LOG_OFF										(0)
#define LOG_ALL           							(1)
#define LOG_ONLY_ERRORS   							(2)

// function defines

#define mysql_reload(%1) mysql_refresh(REFRESH_GRANT, %1)

// plugin callbacks

forward OnMysqlQueryArray(resultid, extravars[], MySQL:handle);
forward OnMysqlQuery(resultid, spareid, MySQL:handle);
forward OnMysqlError(error[], errorid, MySQL:handle);

// plugin natives

native MySQL:mysql_init(logtype = LOG_ONLY_ERRORS, printerrors = 1);
native mysql_connect(const host[], const user[], const pass[], const db[], MySQL:handle = (MySQL:0), auto_reconnect = 0);
native mysql_close(MySQL:handle = (MySQL:0));
native mysql_refresh(options, MySQL:handle = (MySQL:0));
native mysql_select_db(const db[], MySQL:handle = (MySQL:0));
native mysql_query(const query[], resultid = (-1), spareid = (0), MySQL:handle = (MySQL:0));
native mysql_query_array(const query[], resultid = (-1), {Float,_}:extravars[], MySQL:handle = (MySQL:0));
native mysql_store_result(MySQL:handle = (MySQL:0));
native mysql_free_result(MySQL:handle = (MySQL:0));
native mysql_result_stored(MySQL:handle = (MySQL:0));
native mysql_fetch_field(const fieldname[], dest[], MySQL:handle = (MySQL:0));
native mysql_fetch_field_num(fieldnum, dest[], MySQL:handle = (MySQL:0));
native mysql_fetch_row(dest[], const splitter[] = "|", MySQL:handle = (MySQL:0));
native mysql_fetch_row_data(MySQL:handle = (MySQL:0));
native mysql_real_escape_string(const string[], dest[], MySQL:handle = (MySQL:0));
native mysql_num_rows(MySQL:handle = (MySQL:0));
native mysql_num_fields(MySQL:handle = (MySQL:0));
native mysql_affected_rows(MySQL:handle = (MySQL:0));
native mysql_insert_id(MySQL:handle = (MySQL:0));
native mysql_ping(MySQL:handle = (MySQL:0));
native mysql_error(dest[], MySQL:handle = (MySQL:0));
native mysql_errno(MySQL:handle = (MySQL:0));
native mysql_warning_count(MySQL:handle = (MySQL:0));
native mysql_info(dest[], MySQL:handle = (MySQL:0));
native mysql_stat(dest[], MySQL:handle = (MySQL:0));
native mysql_get_server_info(dest[], MySQL:handle = (MySQL:0));
native mysql_get_host_info(dest[], MySQL:handle = (MySQL:0));
native mysql_data_seek(rownum, MySQL:handle = (MySQL:0));
native mysql_set_character_set(const csname[], MySQL:handle = (MySQL:0));
native mysql_get_character_set(csname[], MySQL:handle = (MySQL:0));
native mysql_fetch_int(MySQL:handle = (MySQL:0));
native Float:mysql_fetch_float(MySQL:handle = (MySQL:0));
native mysql_fetch_string(dest[], MySQL:handle = (MySQL:0));

#if !defined split
// split function - thanks to Blacklite
stock split(const strsrc[], strdest[][], delimiter = '|')
{
	new i, li, aNum, len, srclen = strlen(strsrc);
	while(i <= srclen)
	{
		if (strsrc[i] == delimiter || i == srclen)
		{
			len = strmid(strdest[aNum], strsrc, li, i, 128);
			strdest[aNum][len] = 0;
			li = i + 1;
			aNum++;
		}
		i++;
	}
}
#endif

 

 

 

Share this post


Link to post
Share on other sites
  • 0

@Awiero527, в .inc файле библиотеки перечислены все нативные функции с необходимым порядком аргументов для работы с базой данных. Обратите внимание на аргументы в mysql_connect:

native mysql_connect(const host[], const user[], const pass[], const db[], MySQL:handle = (MySQL:0), auto_reconnect = 0);

Сначала указывается пароль, а лишь потом название базы данных.

 

Далее, текущая версия базы данных крайне стара. Если у Вас есть возможность, лучше обновитесь до одной из последних: R41. Где скачать библиотеку MySQL?

 

Ну, и если все же не горите желанием обновлять библиотеку, попробуйте сделать подключение так:

Спойлер

// в начало мода
new MySQL:dbHandle;

// в OnGamemodeInit
public OnGamemodeInit() {
	dbHandle = mysql_init();
	mysql_connects();
}

stock mysql_connects() {
	dbHandle = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD, MYSQL_BASE);
	switch(mysql_ping())
	{
		case 1: print("??????????? ? ???? ?????? ????????? ??????");
		case -1: print("??????????? ? ???? ?????? ????????? ????????");
	}
}

 

 

И на будущее три нюанса:

  • Вместо mysql_ping() лучше использовать специальную функцию mysql_errno, которая возвращает идентификатор ошибки, что позволяет получить больше информации о возникшей проблеме.
  • У каждого языка программирования существует свой стиль обозначения переменных и функций. Например, в Java принято все переменные называть с маленькой буквы, а каждое последующее слово в них с большой: isValid, weather, playerName. А функции - также, с маленькой буквы, каждое последующее слово с большой, но первое слово должно быть глаголом. Ибо функция создана для того, чтобы что-то делать: возвращать (get), изменять (set), удалять (delete), создавать (create), добавлять (add), проверять (is, check). Опять же, на примере Java, getWeather(), getPlayerName(). В Pawn же принято все переменные называть исключительно с маленькой буквы, слова отделять нижними подчеркиваниями, например, is_valid, weather, player_name. Функции: каждое слово с большой буквы, первое - глагол. GetWeather(), GetPlayerName(). К чему я это пишу? Выберите какой-нибудь наиболее удобный для себя вариант из предложенных и следуйте ему. Почему необязательно использовать вариант от Pawn? Потому что так делают лишь в единицах языков. Переучиваться стилю под каждый язык слишком муторно. Поэтому вполне приемлемо использовать стиль кода, взятый из других языков, как сделал я. А что сделали Вы? Переменная подключения: dbHandle, функции: mysql_connects(). Вперемешку да в кашу.
  • Любая функция должна давать Вам полную картину о том, что она делает. Если функция подключается к базе данных (одной!), то и в названии должно быть подключение к одной базе данных: MySQLConnect (или connectMysql). А у Вас по названию подключение к куче баз данных, по факту - к одной: mysql_connects().

Share this post


Link to post
Share on other sites
  • 0
1 час назад, odosenok сказал:

@Awiero527, в .inc файле библиотеки перечислены все нативные функции с необходимым порядком аргументов для работы с базой данных. Обратите внимание на аргументы в mysql_connect:


native mysql_connect(const host[], const user[], const pass[], const db[], MySQL:handle = (MySQL:0), auto_reconnect = 0);

Сначала указывается пароль, а лишь потом название базы данных.

 

Далее, текущая версия базы данных крайне стара. Если у Вас есть возможность, лучше обновитесь до одной из последних: R41. Где скачать библиотеку MySQL?

 

Ну, и если все же не горите желанием обновлять библиотеку, попробуйте сделать подключение так:

  Код (открыть спойлер)


// в начало мода
new MySQL:dbHandle;

// в OnGamemodeInit
public OnGamemodeInit() {
	dbHandle = mysql_init();
	mysql_connects();
}

stock mysql_connects() {
	dbHandle = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD, MYSQL_BASE);
	switch(mysql_ping())
	{
		case 1: print("??????????? ? ???? ?????? ????????? ??????");
		case -1: print("??????????? ? ???? ?????? ????????? ????????");
	}
}

 

 

И на будущее три нюанса:

  • Вместо mysql_ping() лучше использовать специальную функцию mysql_errno, которая возвращает идентификатор ошибки, что позволяет получить больше информации о возникшей проблеме.
  • У каждого языка программирования существует свой стиль обозначения переменных и функций. Например, в Java принято все переменные называть с маленькой буквы, а каждое последующее слово в них с большой: isValid, weather, playerName. А функции - также, с маленькой буквы, каждое последующее слово с большой, но первое слово должно быть глаголом. Ибо функция создана для того, чтобы что-то делать: возвращать (get), изменять (set), удалять (delete), создавать (create), добавлять (add), проверять (is, check). Опять же, на примере Java, getWeather(), getPlayerName(). В Pawn же принято все переменные называть исключительно с маленькой буквы, слова отделять нижними подчеркиваниями, например, is_valid, weather, player_name. Функции: каждое слово с большой буквы, первое - глагол. GetWeather(), GetPlayerName(). К чему я это пишу? Выберите какой-нибудь наиболее удобный для себя вариант из предложенных и следуйте ему. Почему необязательно использовать вариант от Pawn? Потому что так делают лишь в единицах языков. Переучиваться стилю под каждый язык слишком муторно. Поэтому вполне приемлемо использовать стиль кода, взятый из других языков, как сделал я. А что сделали Вы? Переменная подключения: dbHandle, функции: mysql_connects(). Вперемешку да в кашу.
  • Любая функция должна давать Вам полную картину о том, что она делает. Если функция подключается к базе данных (одной!), то и в названии должно быть подключение к одной базе данных: MySQLConnect (или connectMysql). А у Вас по названию подключение к куче баз данных, по факту - к одной: mysql_connects().

Господи,наконец-то.Огромное спасибо!Пытался исправить ошибку уже около недели.

Share this post


Link to post
Share on other sites
  • 0
В 28.04.2020 в 20:36, keyl1337 сказал:

Местами Base, Password поменяй попробуй. 

@Awiero527 вам в первом сообщении в этой теме написали про поменять местами, Вы ответили, что не помогло...

Share this post


Link to post
Share on other sites
  • 0
26 минут назад, DEST сказал:

@Awiero527 вам в первом сообщении в этой теме написали про поменять местами, Вы ответили, что не помогло...

Помогла именно переустановка MySQL на новую (хотя я ставил различные версии).А переустановка местами значений мне не помогла

1 час назад, odosenok сказал:

@Awiero527, в .inc файле библиотеки перечислены все нативные функции с необходимым порядком аргументов для работы с базой данных. Обратите внимание на аргументы в mysql_connect:


native mysql_connect(const host[], const user[], const pass[], const db[], MySQL:handle = (MySQL:0), auto_reconnect = 0);

Сначала указывается пароль, а лишь потом название базы данных.

 

Далее, текущая версия базы данных крайне стара. Если у Вас есть возможность, лучше обновитесь до одной из последних: R41. Где скачать библиотеку MySQL?

 

Ну, и если все же не горите желанием обновлять библиотеку, попробуйте сделать подключение так:

  Код (открыть спойлер)


// в начало мода
new MySQL:dbHandle;

// в OnGamemodeInit
public OnGamemodeInit() {
	dbHandle = mysql_init();
	mysql_connects();
}

stock mysql_connects() {
	dbHandle = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD, MYSQL_BASE);
	switch(mysql_ping())
	{
		case 1: print("??????????? ? ???? ?????? ????????? ??????");
		case -1: print("??????????? ? ???? ?????? ????????? ????????");
	}
}

 

 

И на будущее три нюанса:

  • Вместо mysql_ping() лучше использовать специальную функцию mysql_errno, которая возвращает идентификатор ошибки, что позволяет получить больше информации о возникшей проблеме.
  • У каждого языка программирования существует свой стиль обозначения переменных и функций. Например, в Java принято все переменные называть с маленькой буквы, а каждое последующее слово в них с большой: isValid, weather, playerName. А функции - также, с маленькой буквы, каждое последующее слово с большой, но первое слово должно быть глаголом. Ибо функция создана для того, чтобы что-то делать: возвращать (get), изменять (set), удалять (delete), создавать (create), добавлять (add), проверять (is, check). Опять же, на примере Java, getWeather(), getPlayerName(). В Pawn же принято все переменные называть исключительно с маленькой буквы, слова отделять нижними подчеркиваниями, например, is_valid, weather, player_name. Функции: каждое слово с большой буквы, первое - глагол. GetWeather(), GetPlayerName(). К чему я это пишу? Выберите какой-нибудь наиболее удобный для себя вариант из предложенных и следуйте ему. Почему необязательно использовать вариант от Pawn? Потому что так делают лишь в единицах языков. Переучиваться стилю под каждый язык слишком муторно. Поэтому вполне приемлемо использовать стиль кода, взятый из других языков, как сделал я. А что сделали Вы? Переменная подключения: dbHandle, функции: mysql_connects(). Вперемешку да в кашу.
  • Любая функция должна давать Вам полную картину о том, что она делает. Если функция подключается к базе данных (одной!), то и в названии должно быть подключение к одной базе данных: MySQLConnect (или connectMysql). А у Вас по названию подключение к куче баз данных, по факту - к одной: mysql_connects().

Кстати.По поводу mysql_connects().Исправил на mysq_connect(),и получил 5 ошибок

Share this post


Link to post
Share on other sites
  • 0

@Awiero527, потому что функция mysql_connect уже есть и Вы ее используете для подключения к базе данных. Назовите функцию, например, MySQLConnect или ConnectMySQL, либо connectMySQL.

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • Antoxa39
      By Antoxa39
      Дратути) Я хочу поделится с новичками одной штучкой,с помощью которой можно сделать спидометр.
       
      Объявляем глобальные переменные.
      new Text:speedtest; В public OnPlayerConnect добавляем следующее.
      speedtest = TextDrawCreate(506.599884, 394.742156, "500 KM/H");// создаем текстдрав при подключении игрока (он не будет отображатся) В конце мода создаем новую функцию.
      forward getsp(playerid); public getsp(playerid) {     new Float:cord[3];     GetVehicleVelocity(GetPlayerVehicleID(playerid),cord[0], cord[1], cord[2]);     new Float:veloc = floatsqroot(floatpower(floatabs(cord[0]), 2.0) + floatpower(floatabs(cord[1]), 2.0) + floatpower(floatabs(cord[2]), 2.0)) * 181.3;     new str[25];     format(str,sizeof(str),"KM/H %d",floatround(veloc));     TextDrawSetString(speedtest,str);     return 1; } Переходим в OnPlayerStateChange и добавляем следующее.
      if(newstate == PLAYER_STATE_DRIVER) {     TextDrawShowForPlayer(playerid,speedtest);     SetTimerEx("getsp", 1, true, "%f", playerid); } if(newstate == PLAYER_STATE_ONFOOT) {     TextDrawHideForPlayer(playerid,speedtest); } ВСЁ!) Мы создали спидометр. Удачи вам в скриптинге!)