Nadal wyskakuje ten sam błąd. Wydaje mi się, że to coś z MySQL po prostu tylko nie wiem co. Pierwszy raz w moim CSowym życiu napotykam ten błąd
Plugin, w którym występuje problem, korzysta z informacji pobranych ze zdalnej bazy danych. Do komunikacji z bazą, a raczej do pobierania z niej odpowiednich danych, stosowany jest język SQL. W składni tego języka wyróżnia się pewne wrażliwe znaki - są to m.in. \, ', `, oraz feralny ". Każdy znak ma przypisaną inną funkcję. W Twoim przypadku następuje zaburzenie ciągłości treści żądania i baza danych zamiast zwrócić tabelę wynikową - zwraca błąd. Jak to wygląda? O tak:
SELECT cos_tam FROM jakas_baza WHERE nazwa_gracza="Kowalski";
Wszystko jest ok, dopóki ten Kowalski nie urozmaici sobie nick'u:
SELECT cos_tam FROM jakas_baza WHERE nazwa_gracza="Kow"alski";
Jak widzisz, kwerenda jest skonstruowana nieprawidłowo - serwer SQL szukałby w bazie pozycji, dla której nazwa_gracza="Kow", ale nagle napotyka w poleceniu jakiś dziwny ciąg znaków (alski";) i wyrzuca błąd, bo ciągu tego nie rozumie.
Aby uniknąć takich sytuacji, należy poprzedzić wrażliwy znak w tym poleceniu znakiem \.
SELECT cos_tam FROM jakas_baza WHERE nazwa_gracza="Kow\"alski";
Teraz serwer wykona polecenie poprawnie i (może) zwróci odpowiednie dane z tabeli.
Są to oczywiście jedynie przykłady pomagające w zrozumieniu całego tego zamieszania.
Aby pozbyć się problemu, należy przefiltrować nick gracza i wszystkie wrażliwe znaki w nim zawarte poprzedzić znakiem \. Np:
replace_all(szNickGracza, iDlugoscNicku, "^"", "\^"");
Pytanie, skąd nagle ten daszek ^ ? No tu z kolei trzeba dodatkowo poprzedzić nim znak ", żeby kompilator zrozumiał o co chodzi (sytuacja analogiczna, jak w przypadku polecenia SQL).
Użytkownik _McHappy edytował ten post 19.10.2017 19:20