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

Тема в разделе "Программирование / Скриптинг", создана пользователем CeBePHb1Y, 10 мар 2015.

  1. CeBePHb1Y

    CeBePHb1Y

    Сообщения:
    19
    Симпатии:
    0
    Код:
    #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)
    		
    		
    	}
    }
    при компиляции выдает такие ошибки
    Код:
    (33) : error 035: argument type mismatch (argument 1)
    (36) : warning 213: tag mismatch
    (3) : error 025: function heading differs from prototype
    
    как исправить? и что то не нашел примера по работе с результатами выборки из БД допустим как узнать сколько в результате строк и как извлечь оттуда к примеру данные первой строки
     
  2. neatek3

    neatek3

    Сообщения:
    124
    Симпатии:
    127
    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 035argument type mismatch (argument 1)
    Это означает что ты сделал ошибку в первом аргументе на 33 строке.
    А именно в функции:
    PHP:
    SQL_Query(query)
    Смотрим в документацию...
    https://sm.alliedmods.net/new-api/dbi/SQL_Query
    Код:
    SQL_Query(Handle database, char[] query, int len)
    Итого: Ты пропустил Handle базы данных.

    Как исправить?
    поменяй
    PHP:
    SQL_Query(query)
    на
    PHP:
    SQL_Query(dbquery)
    Может заработает :victory:
     
    CeBePHb1Y нравится это.
  3. CeBePHb1Y

    CeBePHb1Y

    Сообщения:
    19
    Симпатии:
    0
    спасибо, ошибка исчезла. а с этим что делать?
    Код:
    (3) : error 025: function heading differs from prototype
     
  4. neatek3

    neatek3

    Сообщения:
    124
    Симпатии:
    127
    Скинь код, который получился. (Желательно через 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
     
  5. CeBePHb1Y

    CeBePHb1Y

    Сообщения:
    19
    Симпатии:
    0
    neatek3, ну я только вставил индентификатор бд, остальное все то же
    http://pastebin.com/4V4eJ2q5
     
  6. neatek3

    neatek3

    Сообщения:
    124
    Симпатии:
    127
    Я тебя еще как бы про Sourcemod спросил...
     
  7. CeBePHb1Y

    CeBePHb1Y

    Сообщения:
    19
    Симпатии:
    0
    да 1.7) убрал return 0 вроде пока без ошибок. подскажи еще пожалуйста,
    Код:
    /* 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 будет содержать результат. а как с ним работать? как извлекать данные?
     
  8. neatek3

    neatek3

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

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

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

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

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

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