MySQL Query выдает ошибку не соответствия типов

CeBePHb1Y

Участник
Сообщения
19
Реакции
0
C-подобный:
#include <sourcemod>

public OnClientPutInServer(client)
{
	decl String:SteamID[25];
	if (GetClientAuthId(client, AuthId_Steam2, SteamID, sizeof(SteamID))) PrintToChatAll("connected: %s", SteamID);
	
	new String:error[255]
	new Handle:db = SQL_DefConnect(error, sizeof(error))
	 
	if (db == INVALID_HANDLE)
	{
		PrintToChatAll("Could not connect: %s", error)
	}
	else
	{
		
		
		new Handle:hQuery
		new String:query[100]
	 
		/* Create enough space to make sure our string is quoted properly  */
		new buffer_len = strlen(SteamID) * 2 + 1
		new String:new_name[buffer_len]
	 
		/* Ask the SQL driver to make sure our string is safely quoted */
		SQL_QuoteString(db, SteamID, new_name, buffer_len)
	 
		/* Build the query */
		Format(query, sizeof(query), "SELECT userid FROM vb_user WHERE username = '%s'", new_name)
	 
		/* Execute the query */
		if ((hQuery = SQL_Query(query)) == INVALID_HANDLE)
		{
			return 0
		}
	 
		/* Get some info here
		 */
	 
		CloseHandle(hQuery)
		
		
	}
}
при компиляции выдает такие ошибки
C-подобный:
(33) : error 035: argument type mismatch (argument 1)
(36) : warning 213: tag mismatch
(3) : error 025: function heading differs from prototype
как исправить? и что то не нашел примера по работе с результатами выборки из БД допустим как узнать сколько в результате строк и как извлечь оттуда к примеру данные первой строки
 

BenjaminPaul

Code is poetry
Сообщения
177
Реакции
220
https://sm.alliedmods.net/new-api/dbi/SQL_Query (Не советую использовать SQL_Query)
https://sm.alliedmods.net/new-api/dbi/SQL_TQuery (Вот это постоянно использую)

Насчет тебя. Ты написал:
PHP:
if ((hQuery = SQL_Query(query)) == INVALID_HANDLE)
Жутковато, и точек с запятой нет в концах, ну да пофиг)
Ты сделал ошибку:
PHP:
(33) : error 035: argument type mismatch (argument 1)
Это означает что ты сделал ошибку в первом аргументе на 33 строке.
А именно в функции:
PHP:
SQL_Query(query)
Смотрим в документацию...
https://sm.alliedmods.net/new-api/dbi/SQL_Query
C-подобный:
SQL_Query(Handle database, char[] query, int len)
Итого: Ты пропустил Handle базы данных.

Как исправить?
поменяй
PHP:
SQL_Query(query)
на
PHP:
SQL_Query(db, query)

Может заработает :victory:
 

CeBePHb1Y

Участник
Сообщения
19
Реакции
0
https://sm.alliedmods.net/new-api/dbi/SQL_Query (Не советую использовать SQL_Query)
https://sm.alliedmods.net/new-api/dbi/SQL_TQuery (Вот это постоянно использую)

Насчет тебя. Ты написал:
PHP:
if ((hQuery = SQL_Query(query)) == INVALID_HANDLE)
Жутковато, и точек с запятой нет в концах, ну да пофиг)
Ты сделал ошибку:
PHP:
(33) : error 035: argument type mismatch (argument 1)
Это означает что ты сделал ошибку в первом аргументе на 33 строке.
А именно в функции:
PHP:
SQL_Query(query)
Смотрим в документацию...
https://sm.alliedmods.net/new-api/dbi/SQL_Query
C-подобный:
SQL_Query(Handle database, char[] query, int len)
Итого: Ты пропустил Handle базы данных.

Как исправить?
поменяй
PHP:
SQL_Query(query)
на
PHP:
SQL_Query(db, query)

Может заработает :victory:
спасибо, ошибка исчезла. а с этим что делать?
C-подобный:
(3) : error 025: function heading differs from prototype
 

BenjaminPaul

Code is poetry
Сообщения
177
Реакции
220
спасибо, ошибка исчезла. а с этим что делать?
C-подобный:
(3) : error 025: function heading differs from prototype

Скинь код, который получился. (Желательно через http://pastebin.com/)
У тебя не Sourcemod 1.7.0?

Походу ошибка в определении, 3 строчка, но я её тут не вижу, значит скидывай код, чо ты там нашаманил
PHP:
public OnClientPutInServer(client)

Если у тебя Sm1.7.0 должно быть так, по идеи
PHP:
public OnClientPutInServer(int client)
{
}

PS. new String: new Handle: - уже не существует в sm1.7 и прочих new
 

CeBePHb1Y

Участник
Сообщения
19
Реакции
0
Я тебя еще как бы про Sourcemod спросил...
да 1.7) убрал return 0 вроде пока без ошибок. подскажи еще пожалуйста,
C-подобный:
/* Build the query */
		Format(query, sizeof(query), "SELECT userid FROM vb_user WHERE username = '%s'", new_name)
	 
		/* Execute the query */
		if ((hQuery = SQL_Query(query)) == INVALID_HANDLE)
я так понимаю hQuery будет содержать результат. а как с ним работать? как извлекать данные?
 

BenjaminPaul

Code is poetry
Сообщения
177
Реакции
220
Ты прости, но бл***ть как же бесят люди, которые задают куча вопросов при этом ничего не читают и хотят научиться программировать. Просто возьми почитай wiki, и документацию по функциям. И твои вопросы сразу же исчезнут. Ещё раз прости.

Особенно бесят люди, которые пишут "напиши готовый код".

... бомбануло как бэ.
Я ничего против вас не имею, но вы блин читайте, практикуйтесь.

По поводу твоего вопроса. Да. он возвращает хэндл твоего запроса из него извлекать данные если он валидный.

Псевдокод:
new handle:query(...);
тут юзаешь while(FetchRow(handle))
внутри пишешь FetchInt или FetchString...
указываешь параметры нужные, их смотришь в доках.

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