Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] problem z drugim połączeniem, mysqli
14lukas14
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 13.08.2010

Ostrzeżenie: (0%)
-----


A ja mam taki problem.. mam stronkę, na której używam systemu newsow i komentarzy.. korzystam z biblioteki mysqli... mam plik php z funkcja lacz_bd() [zwraca obiekt
Kod
$bd
] odpowiedzialną za ustanowienie połączenia z bazą właśnie za pomocą mysqli.. wszystko śmiga ładnie.. ale wymyśliłem sobie, żeby do komentarzy napisać osobny moduł, taki który mogliby wykorzystać inni użytkownicy.. tak więc logicznym jest także, aby ten moduł miał osobny plik php z funkcją lacz_bd_c() [zwraca obiekt
Kod
$bd_c
]...
i teraz operacje dodawania/wyswietlania komentarzy nie działają, podobnie jak wszystkie inne zapytania na obiekcie
Kod
$bd_c
..

wygląda to mniej więcej tak (kodu nie przytaczam ze względu na jego objętość):

Kod
<strona>
lacz_bd();
operacje na obiekcie $bd //tu wszystko śmiga
lacz_bd_c();
operacje na obiekcie $bd_c //tu właśnie pusto.. nic nie dodaje[insert], nic nie zwraca[select] itp
$bd_c->close();
$bd->close();
</strona>


taka modyfikacja także nic nie daje
Kod
<strona>
lacz_bd();
operacje na obiekcie $bd //tu wszystko śmiga
$bd->close();
lacz_bd_c();
operacje na obiekcie $bd_c //tu właśnie pusto.. nic nie dodaje[insert], nic nie zwraca[select] itp
$bd_c->close();
</strona>


odrazu moge napisać, że zapytania na obiekcie $bd jak i $bd_c są poprawne, gdyż wystarczy, że zostawię sam fragment kodu (czyli jedna funkcja łącząca z bazą na cały skrypt):
Kod
lacz_bd_c();
operacje na obiekcie $bd_c //teraz śmiga
$bd_c->close();

i wszystko działa jak powinno..
to samo gdy w komentarzach zacznę odwoływać się do obiektu $bd zamiast tworzyć nowe połączenie, wtedy również bez zastrzeżeń..

wniosek: błąd tkwi w tym, że drugie połączenie coś knoci i na obiekcie przez niego zwracanym nie działają żadne zapytania do bazy danych.. miał ktoś kiedyś podobny problem??

używam krasnala, włączyłem php5..
Go to the top of the page
+Quote Post
toel
post
Post #2





Grupa: Zarejestrowani
Postów: 97
Pomógł: 11
Dołączył: 2.02.2010

Ostrzeżenie: (0%)
-----


Jeśli do łączenia się używasz również oddzielnego obiektu to po prostu przerób go na Singleton.
Ew. połączenie przekazuj jako parametr, żeby nie łączyć się 2 razy.
Go to the top of the page
+Quote Post
14lukas14
post
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 13.08.2010

Ostrzeżenie: (0%)
-----


czyli chcesz powiedzieć, że nie można stworzyć dwóch lub więcej obiektów połączenia z mysql w jednym skrypcie.questionmark.gif
Go to the top of the page
+Quote Post
toel
post
Post #4





Grupa: Zarejestrowani
Postów: 97
Pomógł: 11
Dołączył: 2.02.2010

Ostrzeżenie: (0%)
-----


szczerze mówiąc nigdy nie potrzebowałem więcej niż jednego połączenia, więc po prostu nie wiem smile.gif
Go to the top of the page
+Quote Post
erix
post
Post #5





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Możesz mieć tyle połączeń, ile wytrzymają zasoby i limity.

Pokaż lepiej kod tej lacz_db.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
thek
post
Post #6





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Najprawdopodobniej połączenie jest wywoływane tylko raz i dostaje swój identyfikator, ale ponowne jego wywołanie nie rozumie, że chcesz mieć połączenie osobne i próbuje przypisać mu to pierwsze. Sprawdź zresztą co Ci daje var_dump dla $bd i $bd_c. Możliwe, że gdzieś wali błąd przez próbę odwołania z tymi samymi danymi lub zamknięciem zmiennej $bd. Zdebuguj te zmienne...


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
14lukas14
post
Post #7





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 13.08.2010

Ostrzeżenie: (0%)
-----


trochę to nieciekawe, bo zamierzałem zbudować stronę ładując do niej kilka komponentów.. z czego każdy miał mieć swoje połączenie, z użytkownikiem z pewnymi przywilejami na określone tabele;/

  1. <?php
  2. function db_lacz(/*$komputer, $uzyt, $haslo, $baza*/)
  3. {
  4. require_once('hasla/_pass_.php');
  5. @$db=new mysqli("$komp", "$user", "$haslo", "$baza");
  6. if(mysqli_connect_errno())
  7. {
  8. echo 'Błąd. Połączenie z bazą danych niemożliwe. Spróbuj póĽniej.';
  9. }
  10. return $db;
  11. }
  12. ?>



  1. <?php
  2. function db_lacz_c()
  3. {
  4. global $__db_user__;
  5. global $__db_password__;
  6. global $__db_name__;
  7. global $__db_host__;
  8. global $__db_table__;
  9.  
  10. @$db_c=new mysqli("$__db_host__", "$__db_user__", "$__db_password__", "$__db_name__");
  11. if(mysqli_connect_errno())
  12. {
  13. echo 'Błąd. Połączenie z bazą danych niemożliwe.
  14. Spróbuj póĽniej.';
  15. exit();
  16. }
  17. return $db_c;
  18. }
  19. ?>


Ten post edytował 14lukas14 13.08.2010, 12:27:59
Go to the top of the page
+Quote Post
thek
post
Post #8





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




przecież da się tworzyć kilka połączeń w skrypcie. Problem tylko jest jeden z tym. Liczba userow mających jednocześnie do bazy maleje do ilość_maksymalnych_połączeń/ilość_połączeń_na_skrypt
Zadaj sobie pytanie: "Czy ma to sens?"


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
14lukas14
post
Post #9





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 13.08.2010

Ostrzeżenie: (0%)
-----


var_dump dla $db
Kod
object(mysqli)#1 (0) { }


var_dump dla $db_c
Kod
NULL


jakieś pomysły..questionmark.gif dlaczego daje nulla..questionmark.gif

co do Twojego pytania thek.. nie o to chodzi.. po prostu mój skrypt ma być później wykorzystywany przez innych.. a jego instalacja i użytkowanie ma być najprostsze jak się tylko da.. więc ustanowienie nowego połączenia, na konkretnym użytkowniku jest mi tu niezbędne..

EDIT:
naprawione.. okazało się że funkcja db_lacz_c() nie widzi tych globalnych zmiennych potrzebnych do zalogowania ;]
dzieki za pomoc..

Ten post edytował 14lukas14 13.08.2010, 13:03:03
Go to the top of the page
+Quote Post
LukenZi
post
Post #10





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 20.07.2010

Ostrzeżenie: (0%)
-----


Przy okazji tego tematu co by nowego nie zakladac - jaka jest praktyka tworzenia serwisow, ktore beda odwiedzane przez duza liczbe osob? Czy powinno sie polaczenie z baza zestawiac na poczatku np. index, na koncu rozlaczac, czy w kazdej funkcji gdzie jest kwerenda zestawiac polaczenie (czasami wiecej) i po jej wykonaniu rozlaczac ? I tak w skrypcie powiedzmy 5-10 razy na jedno wywolanie
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 07:01