Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: uciążliwy bład , mysql
Forum PHP.pl > Forum > PHP
nakers2
Warning: mysql_connect() [function.mysql-connect]: Can't connect to MySQL server on 'localhost' (10048) in C:\Documents and Settings\konnto\Pulpit\PHP\gra\var\ustawienia_mysql.php on line 7
socket error

a tak wygląda plik var

$host_bazy_danych = 'localhost';
$uzytkownik_bazy_danych = 'root';
$haslo_bazy_danych = '';
$nazwa_bazy_danych = 'trata';

$polacz = mysql_connect($host_bazy_danych, $uzytkownik_bazy_danych, $haslo_bazy_danych) or die('socket error');
mysql_select_db($nazwa_bazy_danych,$polacz) or die('socket error - no db');


... błąd pojawia sie co rusz obojętnie jaki link klikne w silniku gry, nie mam pojęcia czym to może być spowodowane... raz wyskakuje raz wszystko jest ok

to nie jest wina silnika tylko mysql jak zauważyłem... chyba
bo gdy wejde w php my-admin to wlasnie tam tez co rusz baza sie hamuje
Daimos
  1. $polacz = mysql_connect($host_bazy_danych, $uzytkownik_bazy_danych, $haslo_bazy_danych) or die('socket error');

no co Ty, sam sobie ustalasz jaki błąd jest, jeśli już wystąpił? smile.gif
Zamień to na:
  1. $polacz = mysql_connect($host_bazy_danych, $uzytkownik_bazy_danych, $haslo_bazy_danych) or die(mysql_error());

i teraz sprawdź jaki jest błąd

i sprawdź na jakim porcie śmiga baza smile.gif

ps. 52 posty i nie nauczyłeś się kolorować kodu?!
nakers2
teraz zaś pojawia się to:

Can't connect to MySQL server on 'localhost' (10048)

to samo pojawiło się wcześniej.. tylko nie w tej linijce
czyli jak myslalem nie jest to wina silnika, kodu ?
mlawnik
No comments

Wypełnij zmienne twoimi danymi do bazy.
nakers2
gdybyś spojrzał w góre widzial byś że mam takowy przedrostek:


$host_bazy_danych = 'localhost';
$uzytkownik_bazy_danych = 'root';
$haslo_bazy_danych = '';
$nazwa_bazy_danych = 'trata';
mlawnik
A czy pod tymi danymi na pewno stoi baza? masz ją na localhoście?

Jest to błąd połączenia, masz ją dobrze skonfigurowaną?
nakers2
Cytat
A czy pod tymi danymi na pewno stoi baza? masz ją na localhoście?

Jest to błąd połączenia, masz ją dobrze skonfigurowaną?

przecież pisze że raz wyskakuje ten błąd.. a raz nie, to nie jest tak że się trzyma cały czas

czym dłużej klikam w silniku rzeczy tym potem rzadziej wyskakuje błąd... po pewnym czasie już w ogóle go nie ma... ale potem na nowo
Daimos
pewnie baza nie wyrabia
mlawnik
Hmmm, no racja. A jak ona duża jest?
nakers2
nie przyszło mi to do głowy,

baza jest na prawde duża, to gra przeglądarkowa,
21 tabel i nie jestem w stanie oszacować jak dużo rekordów... ale na prawde dużo

nie ma na to rady ?
korex
pewnie trzeba cos zoptymalizowac:) albo wydluzyc czas oczekiwania na odpowiedz bazy;]
mlawnik
Ale to coś kijowa ta gra, jak po instalacji jest taka baza.
Ile masz zarejestrowanych użytkowników?
Pewnie niewiele, skoro stoi na localhoście.
Wszystkie (prawie) OpenSource leżą i kwiczą w tym temacie.
Kiedyś obleciałem pół sourceforge i wszystkie takie były sad.gif
nakers2
Kod
Ale to coś kijowa ta gra, jak po instalacji jest taka baza.

pisze ją od 2 miesięcy, uczyłem się na niej php

Cytat
pewnie trzeba cos zoptymalizowac:) albo wydluzyc czas oczekiwania na odpowiedz bazy;]


skoro sie na tym znasz, moglbys sprecyzować co ma najwiekszy wplyw na obciazenie bazy ?.. chyba nie liczba rekordów?
w sensie, jak mógłbym zoptymalizować ?
Daimos
Nikt nie wie jak masz zbudowaną bazę i jakich używasz zapytań, więc nikt Ci w tym nie pomoże. Musisz zaprojektować odpowiednio bazę, no i używać zoptymalizowanych zapytań. Do tego jeszcze ewentualnie jakiś cache
mortus
A co ma struktura bazy do rzeczy, skoro kolega się z bazą nie łączy? Widzę, że mySQL na jakimś niestandardowym porcie działa. Spróbuj zatem z takim ustawieniem:
  1. $host_bazy_danych = 'localhost:10048';

A jak nie pomoże, to spróbuj na standardowym porcie:
  1. $host_bazy_danych = 'localhost:3306';

Możliwe, że coś jest nie tak z konfiguracją mySQL-a, a może i PHP.
nakers2
Cytat
Możliwe, że coś jest nie tak z konfiguracją mySQL-a, a może i PHP.

no właśnie wgrałem silnik na hosting i okazuje się że żaden błąd nie wyskakuje... tylko u mnie na localhoscie

aha i sprawdze te porty
Daimos
Cytat(mortus @ 20.06.2011, 23:51:50 ) *
A co ma struktura bazy do rzeczy, skoro kolega się z bazą nie łączy? Widzę, że mySQL na jakimś niestandardowym porcie działa. Spróbuj zatem z takim ustawieniem:
  1. $host_bazy_danych = 'localhost:10048';

A jak nie pomoże, to spróbuj na standardowym porcie:
  1. $host_bazy_danych = 'localhost:3306';

Możliwe, że coś jest nie tak z konfiguracją mySQL-a, a może i PHP.

Przeczytaj cały temat, czasami ma błąd. Więc zdążyliśmy przejść już do optymalizacji
mortus
Cytat(Daimos @ 21.06.2011, 00:01:37 ) *
Przeczytaj cały temat, czasami ma błąd. Więc zdążyliśmy przejść już do optymalizacji

Przeczytałem cały temat i kolega ma błąd, bo się z bazą danych nie łączy. A jak się nie łączy, to dlaczego błąd ma być spowodowany nieoptymalnie zbudowaną bazą danych? Przecież to zupełnie odrębny aspekt. Tym bardziej, że bazę danych kolega wybiera dopiero po połączeniu z serwerem (mysql_select_db()).

EDIT
"Czasami ma błąd" może być jak najbardziej spowodowane nieprawidłową konfiguracją.

Temat przeczytałem zanim napisałem pierwszy post.


Cytat(mortus @ 20.06.2011, 23:51:50 ) *
A co ma struktura bazy do rzeczy, skoro kolega się z bazą nie łączy? Widzę, że mySQL na jakimś niestandardowym porcie działa. Spróbuj zatem z takim ustawieniem:
  1. $host_bazy_danych = 'localhost:10048';

A jak nie pomoże, to spróbuj na standardowym porcie:
  1. $host_bazy_danych = 'localhost:3306';

Możliwe, że coś jest nie tak z konfiguracją mySQL-a, a może i PHP.

Źle zinterpretowałem komunikat błędu, ponieważ liczba w nawiasie to nie numer portu, a numer błędu. Za to przepraszam, bo to nie wina portów.
Natomiast:

Cytat(nakers2 @ 20.06.2011, 20:42:05 ) *
teraz zaś pojawia się to:

Can't connect to MySQL server on 'localhost' (10048)

to samo pojawiło się wcześniej.. tylko nie w tej linijce
czyli jak myslalem nie jest to wina silnika, kodu ?

Przyczyną błędu jest zbyt duża liczba otwartych połączeń z serwerem MySQL. Tak na dobrą sprawę funkcji mysql_connect() wystarczy użyć tylko raz w jednym pliku i wypada również połączenie zakończyć (mysql_close()) jeśli już go nie potrzebujemy. Błąd występuje pod Windows-ami, choć nie wiem, w których wersjach.
nakers2
poprawiłem te zapytania bo faktycznie miałem przekombinowane, ale jak to mówią na błędach się uczy
jest wszystko w porządku

mimo to przy okazji mogę spytać się o coś jeszcze, a to też dodatkowo mi tą baze obciąża...

denerwuje mnie ciągłe wklepywanie do każdej funkcji np. w systemie gildi tego samego zapytania

Cytat
$gildia = mysql_query("select * from gra_gildie where nazwa = '".$player['nazwa_gildi']."'");
while($g = mysql_fetch_array($gildia)){


nie mogę wlepić go na sam początek bo nie zadziała na to co dzieje się w funkcjach
jest na to rada ?
mortus
Nie chodzi o liczbę zapytań, ale o zbyt częste używanie funkcji mysql_connect() bez równoczesnego wykorzystywania mysql_close(). Funkcja mysql_connect() ustanawia połączenie z serwerem mySQL i jeśli tych połączeń jest zbyt wiele to w systemach Microsoft-u pojawiają się błędy takie, jak wspomniany. Pod tym względem musisz skrypt przeprogramować.

Niestety nie znam całego Twojego systemu wobec czego nie sposób ustalić, co powinno zostać zmienione, a co nie. Na podstawie podanych dwóch linijek kodu nikt wniosków nie wyciągnie.
nakers2
chodzi mi poprostu o to że gdy mam np, funkcje dodawania do gildi
muszę wklepać w nią właśnie to:

  1. $gildia = mysql_query("select * from gra_gildie where nazwa = '".$player['nazwa_gildi']."'");
  2. while($g = mysql_fetch_array($gildia)){


żeby móc działać w tej funkcji na graczach z gildii... gdy mam funkcje usuwania z gildi również w niej musze wklepać ten kod i tak dalej...
co sprawia ze w kazdej funkcji mam to zapytanie

zawala mi to kod i jak mniemam dodatkowo obciąża baze o nowe zapytania

Cytat
L i jeśli tych połączeń jest zbyt wiele to w systemach Microsoft-u pojawiają się

i dlatego błąd nie pojawiał się na hostingu, bo był na linuxie, tak ?
mlawnik
Pod Windowsem, jak na końcu każdego skryptu dasz mysql_close, to powinno działać.

Chętnie zobaczyłbym kod tej gry, nawet jeszcze w tej nieskończonej fazie.

Jak go wrzucisz, to będziemy w stanie pomóc, nie wróżąc z fusów.

P.S. Popakuj to sobie w funkcje, i za każdym razem tylko nazwa funkcji.
nakers2
Cytat
Pod Windowsem, jak na końcu każdego skryptu dasz mysql_close, to powinno działać.

w sensie gdzie, pod każdym wywołaniem zapytania ? czy w każdym pliku php, jednorazowo ?
mortus
Po każdym wywołaniu
  1. $connection = mysql_connect('host', 'username', 'password');

Jeśli tylko połączenie $connection nie jest Ci już potrzebne, użyj
  1. mysql_close($connection);

Ale ogólnie z wcześniejszych Twoich postów wynika, że po prostu zbyt często połączenie nawiązujesz, podczas gdy nie ma takiej potrzeby. Niestety bez kodu nie jesteśmy w stanie powiedzieć, w których miejscach i co jest nie tak.
nakers2
mógłbym pokazać ale cały silnik to jest 16 pełnych stron kodu...

uczyłem się kupę czasu php od najprostszych skryptów, potem zabrałem się za te całe MYSQL myślałem ze jest malo skomplikowane... nauczyłem, a tu masz, to jest cięższe niż sam php i najgorsze jest że w sumie sam nie wiem jak to sie dzieje że za dużo połączeń. nie mam w ogóle pojęcia co może być tego przyczyną przez brak doświadczenia w tym temacie

robiłem cały czas jak najkrótsze zapytania do mysql - wywoływałem do fetch_array jak najmniej rekordów z tabeli
jedyne czego nie byłem pewny podczas pracy z sql to optymalność pewnej rzeczy...

system mapy jaki zrobiłem do gry opiera sie oczywiście o mysql... na jednej mapie jest na prawde dużo obiektów... drzewa, trawniki, kwiatki itp. wszystko to zostaje pobrane z bazy, może to tak obciąża ?
bo zdaje się bez tego całego cache, z każdym odświeżeniem mapy nabija od początku... ?
mlawnik
Wrzuć ten silnik w zipa na wrzuc.to na przykład.

I racja, każdy kwiatek bez cache będzie pobierać za każdym przeładowaniem strony.

Co do mysql_connect, dajesz jedno na początku skryptu, a po ostatnim zapytaniu dajesz mysql_close.
Proste?
nakers2
chwała Bogu nie popełniłem żadnych błedów wszystko to była wina
braku mysql_close... pozamykałem tym wszystko i jest jak nalezy

żadnego błędu

zawracałem wam dupe a rozwiązanie było tak banalne

dzięki za pomoc, pozdrawiam

Cytat
Co do mysql_connect, dajesz jedno na początku skryptu, a po ostatnim zapytaniu dajesz mysql_close.

w tym sęk że ja ładuje mysql_connect z w odrębnym pliku, dlatego mi się pomieszało

EDYTOWANE:
problem jednak wrócił... osłabiony ale wrócił

podejrzewam lecz już powód... mianowicie gdy gracz wejdzie w strone z mapą
automatycznie generuje się to zapytanie:

  1. $obiekty = mysql_query("select * from gra_obiektynamapie where id_mapy = ".$mapID);

i potem daje to w fetch array i wyświetlam obiekty

sęk w tym że tych obiektów mam średnio na jednej mapie około 100-150
czy to może aż tak obciążać baze że się zacina? podejrzewam to ponieważ gdy włączę mape 2 postaciami (w kartach przeglądarki)
to co rusz wyskakuje ten błąd i z maksymalną częstotliwością
mortus
Ileż razy można powtarzać? Ten błąd nie jest spowodowany pobieraniem danych z bazy, a zbyt dużą liczbą połączeń.

Wklej tutaj kod odpowiedzialny za wyświetlanie postaci. Domyślam się co robisz źle, ale bez odpowiedniego kodu nie mogę tego jednoznacznie stwierdzić.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.