Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

[MySQL] Odczytywanie wartości z tabel.


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
5 odpowiedzi w tym temacie

#1 Mister Silenzo

    Zaawansowany

  • Użytkownik

Reputacja: 39
Życzliwy

  • Postów:83
  • Lokalizacja:BD
Offline

Napisano 05.03.2014 21:08

Witam!
 
Postanowiłem pobawić się trochę pluginami z MySQL, a co za tym idzie, biblioteką "sqlx", już na samym początku napotykam problem, gdyż nie wiem w jaki sposób mam odczytać wartości z tabel i wypisać je w konsoli, a dokładniej, mam taki kod, który odpowiada za połączenie:
 
#include <amxmodx>
#include <sqlx>

new const HOST[] = "localhost";
new const USER[] = "root";
new const PASSWORD[] = "1234567";
new const DB[] = "cstrike_db";

new Handle:mysql;

public plugin_init() {
	register_plugin("TEST", "AUTORSKA", "MISTER SILENZO");
	
	mysql = SQL_MakeDbTuple(HOST, USER, PASSWORD, DB);
	
	new errcode, error[64];
	SQL_Connect(mysql, errcode, error, sizeof(error));
	
	if(errcode == 0) server_print("Polaczenie z baza nawiazane! Baza danych: %s!", DB);
	else {
		new string[128];
		formatex(string, sizeof(string), "Wystapil blad! Kod bledu %i o tresci %s!", errcode, error);
		server_print(string);
		set_fail_state(string);
	}
}
Bazę danych postawiłem na PC poprzez XAMPP'a a jako interfejsu graficznego bazy danych używam HeidiSQL. W interfejsie baza wygląda tak.

0ghdEhX.png

Jest stworzona baza danych o nazwie cstrike_db, w bazie jest tabela o nazwie "konta" a w tabeli są trzy rekordy o właściwościach podanych na screenie.

Teraz chcę ze wszystkich dostępnych rekordów odczytać wartość ID, nick i punkty i wypisać je w konsoli serwera (server_print) w takiej postaci "ID: %i ma nick %s. Jego punkty: %i". Proszę o dokładne wytłumaczenie wszystkich przeprowadzanych operacji, z góry dziękuję za pomoc :>

PS. Czytałem tematy typu "MySQL, z czym to się je", etc., lecz niezbyt do mnie przemówiły ;/
  • +
  • -
  • 0
Moje pluginy:

Kick All (administracja) - Wyrzuca graczy nakładając hasło na serwer.

Zlecenie Zabójstwa (4FUN) - Przyjmij zlecenie, wykonaj je, zdobądź punkty, a następnie wydaj je na dodatki, które pozwolą ci skuteczniej i szybciej wykonywać zlecenia.

#2 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 05.03.2014 22:10

http://amxx.pl/topic...czym-to-sie-je/ zacznij od tego poradnika :) w AMXX obsługa SQL nie wygląda tak kolorowo, jak w np PHP (chociaż i tam nie wygląda kolorowo jeśli ktoś nie używa PDO lub mysqli tylko męczy się na przestarzałych funkcjach mysql) bo nie mamy w AMXX łatwo dostępnych tablic wielowymiarowych podawanych jako parametry do funkcji. Nie mamy również kompletnie struktur ani obiektowości, więc trzeba każdą komórkę wyłuskiwać oddzielnie, ale gdy się już ma gotową i stałą strukturę bazy danych to można sobie pod tą konkretna strukturę odpowiednie funkcje napisać, które nam to ułatwiają :)


  • +
  • -
  • 0

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#3 Mister Silenzo

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 39
Życzliwy

  • Postów:83
  • Lokalizacja:BD
Offline

Napisano 06.03.2014 14:36

Dobra, przeczytałem to jeszcze raz i dokładnie, teraz moje kolejne pytanie.

Odczytać wartość z tabeli i danego wiersza mogę zrobić tylko po wywołaniu komendy SQL (w przypadku mojej bazy) "SELECT 'nick', 'punkty' FROM 'konta' WHERE 'nick'='%s';" i teraz żeby odczytać ilość punktów z tablicy muszę zrobić to w publicu, który jest wywoływany przez SQL_ThreadQuery?

@EDIT

Skleciłem coś takiego:

#include <amxmodx>
#include <sqlx>

new const HOST[] = "127.0.0.1";
new const USER[] = "root";
new const PASSWORD[] = "";
new const DB[] = "cstrike_db";

new Handle:mysql;

public plugin_init() {
	register_plugin("TEST", "AUTORSKA", "MISTER SILENZO");
	
	mysql = SQL_MakeDbTuple(HOST, USER, PASSWORD, DB);
	
	new errcode, error[64];
	SQL_Connect(mysql, errcode, error, sizeof(error));
	
	if(errcode == 0) server_print("Polaczenie z baza nawiazane! Baza danych: %s!", DB);
	else {
		new string[128];
		formatex(string, sizeof(string), "Wystapil blad! Kod bledu %i o tresci %s!", errcode, error);
		server_print(string);
		set_fail_state(string);
	}
	
	register_concmd("amx_save", "save_user");
}

public save_user(id) {
	new cQuery[256], name[32], punkty;
	get_user_name(id, name, 31);
	punkty = 50;
	formatex(cQuery, sizeof(cQuery), "INSERT INTO `konta` (`nick`, `punkty`) VALUES ('%s', %i);", name, punkty);
	
	SQL_ThreadQuery(mysql, "SaveH_", cQuery);
}

public SaveH_(FailState, Handle:Query, Errorcode, Error[], Data[], DataSize)
{
	if(Errorcode) log_amx("Blad w zapytaniu: %s [SaveData] %i", Error, Errorcode);
	
	if(FailState == TQUERY_CONNECT_FAILED)
	{
		log_amx("Nie mozna podlaczyc sie do bazy danych.");
		return PLUGIN_CONTINUE;
	}
	else if(FailState == TQUERY_QUERY_FAILED)
	{
		log_amx("Zapytanie anulowane [SaveData]");
		return PLUGIN_CONTINUE
	}
	log_amx("Zapis Udany! [SaveData]");
	return PLUGIN_CONTINUE
}
Jest jednak jeden problem, w logach wyskakuje takie coś:

L 03/06/2014 - 14:56:05: [amx_ip.amxx] Blad w zapytaniu: 127.0.0.1 [SaveData] 1440
L 03/06/2014 - 14:56:05: [amx_ip.amxx] Zapis Udany! [SaveData]
I pomimo tego zapis się udaje, czy ktoś może mi wytłumaczyć czym jest spowodowany ten bug?

Użytkownik Mister Silenzo edytował ten post 06.03.2014 14:58

  • +
  • -
  • 0
Moje pluginy:

Kick All (administracja) - Wyrzuca graczy nakładając hasło na serwer.

Zlecenie Zabójstwa (4FUN) - Przyjmij zlecenie, wykonaj je, zdobądź punkty, a następnie wydaj je na dodatki, które pozwolą ci skuteczniej i szybciej wykonywać zlecenia.

#4 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 06.03.2014 19:43

Zamień miejscami parametry Errorcode i Error. Poza tym gdy wywołujesz komunikat błędu:

    if(Errorcode) log_amx("Blad w zapytaniu: %s [SaveData] %i", Error, Errorcode);

to już raczej nie wykonujesz komunikatu sukcesu. W tym miejscu powinieneś wyjść z funkcji.


  • +
  • -
  • 0

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#5 Mister Silenzo

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 39
Życzliwy

  • Postów:83
  • Lokalizacja:BD
Offline

Napisano 06.03.2014 19:47

Zamieniłem. Sam zapis działa teraz prawidłowo, tylko nadal nie wiem jak mam odczytywać to co już, np. stworzyłem za pomocą edytora graficznego bazy danych.


Użytkownik Mister Silenzo edytował ten post 06.03.2014 19:51

  • +
  • -
  • 0
Moje pluginy:

Kick All (administracja) - Wyrzuca graczy nakładając hasło na serwer.

Zlecenie Zabójstwa (4FUN) - Przyjmij zlecenie, wykonaj je, zdobądź punkty, a następnie wydaj je na dodatki, które pozwolą ci skuteczniej i szybciej wykonywać zlecenia.

#6 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 06.03.2014 19:48

I tak i nie. Bo nie w tym miejscu miałeś zamienić kolejność, ale 2 linijki wyżej.


  • +
  • -
  • 0

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark





Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych