←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

SQL_ReadResult

Locked

  • +
  • -
Patman's Photo Patman 01.07.2010

Witam, proszę o pomoc w użyciu funkcji SQL_ReadResult. Chciałbym, aby po wpisaniu "wyświetl" wyświetliła się informacja z bazy MySQL np. z bazy "base" tabela "test"(id,text). Wszelkie próby nieudane. Udały się tylko inne operacje na bazie. Na forum fragmenty obszernych pluginów. Chciałbym, aby ktoś napisał mi to czarno na białym ten prosty kod. Dziękuję.

#include <amxmodx>
#include <amxmisc>
#include <sqlx>

#define PLUGIN "test"
#define VERSION "1.0"
#define AUTHOR "author"


public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_concmd("wyswietl","make");
	// Add your code here...
}
public make()
{
	new Handle:Tuple = SQL_MakeDbTuple("localhost", "root", "pw", "base")
	SQL_ThreadQuery(Tuple, "read", "SELECT text FROM test LIMIT 1")
}
public read()
{
	//PLEASE HELP
}
Quote

  • +
  • -
R3X's Photo R3X 01.07.2010

Jeśli ThreadQuery to możesz wykorzystać parametry podawane do funkcji read.
Czytając stringa z pierwszej kolumny (SELECT pierwsza, druga, trzecia_kolumna FROM ....) podajesz drugi parametr 0, potem tablicę i max długość.


Do wątku możesz dodać własne parametry, tu przydałoby się id gracza (tablica data[])

Warto by było sprawdzić czy wynik można odczytać (SQL_MoreResults())
#include <amxmodx>
#include <amxmisc>
#include <sqlx>

#define PLUGIN "test"
#define VERSION "1.0"
#define AUTHOR "author"

new Handle:Tuple;

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_concmd("wyswietl","make");
	
	Tuple = SQL_MakeDbTuple("localhost", "root", "pw", "base")
}
public make(id)
{
	new data[1]
	data[0] = id;
	SQL_ThreadQuery(Tuple, "read", "SELECT text FROM test LIMIT 1", data, 1)
}
public read(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
	new id = Data[0];
	if(id && !is_user_connected(id))
		return PLUGIN_CONTINUE

	if(Errcode)
        {
                console_print(id, "Error on Save_xp query: %s",Error)
		return PLUGIN_CONTINUE
        }
        if(FailState == TQUERY_CONNECT_FAILED)
        {
                console_print(id,"Could not connect to SQL database.")
                return PLUGIN_CONTINUE
        }
        else if(FailState == TQUERY_QUERY_FAILED)
        {
                console_print(id,"Query failed")
                return PLUGIN_CONTINUE
        }
	
	//if(SQL_MoreResults(query)){
	new szText[128];
	SQL_ReadResult(Query, 0, szText, 127);
	console_print(id,"Text = %s", szText)
	//}
}
Quote

  • +
  • -
GwynBleidD's Photo GwynBleidD 09.07.2010

Co do funkcji SQL_ReadResult: jeśli nie znasz numeru kolumny (nie chce Ci się liczyć, zmieniasz coś w kodzie itp) możesz podać coś takiego:

SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "pierwsza"), szText, 127);


W ten sposób amx sam sobie obliczy numer kolumny, wystarczy podać jej nazwę ;)
Quote
Locked