Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php][mysql] Jeden plik - dwie bazy
cezet
post
Post #1





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 5.12.2006

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


Mam następujący problem. Do dyspozycji mam 2 bazy danych na jednym serwerze, i potrzebuję uzyskać dostęp do danych z obu baz z poziomu jednego skryptu.

Ten temat był już poruszany w podobnym wątku. Tam problem został rozwiązany - u mnie nie działa.
Co robię źle?

Połączenie jest uzyskiwane w następujący sposób. Jeden includowany plik conn.php:

  1. <?php
  2. $$link = mysql_connect($server, $username, $password) or die(mysql_error());
  3.  
  4. if ($$link) mysql_select_db($database);
  5. ?>


Oraz drugi includowany plik conn2.php:

  1. <?php
  2. $$link1 = mysql_connect($cserver, $cusername, $cpassword) or die(mysql_error());
  3.  
  4. if ($$link1) mysql_select_db($cdatabase) or die(mysql_error());
  5. ?>


I używam metody z wcześniej wrzuconego wątku:
  1. SELECT baza.tabela.pole FROM baza.tabela


I niestety - nie działa... blinksmiley.gif

Wywala błąd:

SELECT command denied to user 'nazwa_uzytkownika_z_pierwszego_polaczenia'@'******.netart.pl' for table 'firmy'


Proszę, pomóżcie, naprawdę nie wiem jak sobie z tym poradzić... Z góry dzięki winksmiley.jpg

Ten post edytował cezet 20.12.2007, 15:12:02
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 14)
MMX3
post
Post #2





Grupa: Zarejestrowani
Postów: 155
Pomógł: 9
Dołączył: 26.01.2004
Skąd: Poznań

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


powinno chodzić. ewentualnie możesz sobie połączyć dane wewnątrz php. Rozwiązanie powolne w działaniu ale zawsze jakieś rozwiązanie. Jest jeszcze jedna opcja. Zadzwonić do netart i zapytać konsultatna. Ale tylko jak ci zostało z 60 darmowych minut na telefonie.

Pozdro


--------------------
Go to the top of the page
+Quote Post
cezet
post
Post #3





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 5.12.2006

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


Niestety, problem w tym, że nie mogę połączyć danych wewnątrz skryptu.. Jeśli już pobiorę dane z pierwszego połączenia - z pierwszej bazy, to wykrzacza się na próbie pobrania danych z drugiej bazy w tym samym skrypcie (dziwne, żeskrypt  próbuje użyć w drugim połączeniu danych logowania z pierwszej bazy - nie wiem czy za bardzo nie namieszałem). Może jakieś inne propozycje?? winksmiley.jpg
Go to the top of the page
+Quote Post
franki01
post
Post #4





Grupa: Zarejestrowani
Postów: 508
Pomógł: 75
Dołączył: 2.11.2005
Skąd: Bydgoszcz

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


Serwery najczesciej nadaja ograniczenia uzytkownikom co do dostepu do baz danych. Nie mozna np. z poziomu zwyklego SQL'a tworzyc baz (trzeba korzystac z cPanelu, DirectAdmina). Takie same ograniczenia dotycza poslugiwania sie bazami danych. Nie wiem czy na tym serwerze sa tez takie ograniczenia, ale po bledzie pewnie tak. Jak chcesz sprawdzic czy dobrze dziala, to zainstaluj na localhost jakis serwer (np. AppServ) i wtedy zobacz czy skrypt dziala, bo user ma pelne prawa do baz.
Go to the top of the page
+Quote Post
ucho
post
Post #5





Grupa: Zarejestrowani
Postów: 300
Pomógł: 32
Dołączył: 31.07.2006

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


Jak rozumiem chcesz być podłaczony do obu baz jednocześnie i wykonywać na nich operacje. Zgaduje - ze skoro przy mysql_select_db nie przekazujesz $link jako ostatniego parametru to i przy mysql_query o tym nie pamietasz - to skąd baza ma php ma wiedzieć do której bazy chcesz wysłać zapytanie? smile.gif
Go to the top of the page
+Quote Post
nevt
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


a pokaż może jak potem w kodzie php korzystasz z obu połaczeń? bo coś mi się wydaje, że nawiązujesz dwa połączenia, ale poźniej korzystasz tylko z jednego...


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

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
cezet
post
Post #7





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 5.12.2006

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


Szczerze mówiąc - fakt, nie pamiętam, bo nawet o tym nie słyszałem. Do tej pory pracowałem tylko na jednej bazie jednocześnie, i było wszystko ok. Co do użycia; oto zapytanie które ma pobrać dane z bazy pierwszej (gdy - teoretycznie nawiązane są połączenia z obiema bazami):

  1. <?php
  2. $qcfg1 = "SELECT $database.firmy.* from $database.firmy where firma_id = '$firma'";
  3. $rcfg1 = mysql_query($qcfg1) or die("BLAD 2");
  4. ?>


Ok. A w takim razie w jaki sposób przekazać parametr $$linkquestionmark.gif

Czy to będzie coś w rodzaju:

  1. <?php
  2. $rcfg1 = mysql_query($qcfg1, $$link) or die("BLAD 2");
  3. ?>


questionmark.gif
Go to the top of the page
+Quote Post
PawelC
post
Post #8





Grupa: Zarejestrowani
Postów: 1 173
Pomógł: 121
Dołączył: 24.09.2007
Skąd: Toruń

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


Czemu masz $$link a nie $link??
Go to the top of the page
+Quote Post
nevt
post
Post #9





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


$$link - dlatego że ten kod był przygotowany do wielokrotnego includowania, a kolega cezet niepotrzebnie go przerabiał, tego się używa mniej więcej tak:
  1. <?php
  2. $link = 'baza1';
  3. include('conn.php');
  4. $link = 'baza2';
  5. include('conn.php');
  6. $sql = 'SELECT * FROM tabela;';
  7. $result1 = mysql_query($sql, $baza1); //wykonuje zapytanie na pierwszej bazie
  8.  $result2 = mysql_query($sql, $baza2); //wykonuje zapytanie na drugiej bazie
  9. ?>

i tyle. powodzenia.


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

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
cezet
post
Post #10





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 5.12.2006

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


Ok. Potestowałem. W każdym miejscu, tam gdzie powinno być - wstawiłem wskaźnik połączenia $$link lub $$link1 w zależności od bazy - której dotyczy. Połączenie zostało nawiązane, jednak problem dalej jest.Po nawiązaniu połączenia z drugą bazą ($$link1) i próbie pobrania danych z bazy pierwszej (query, z parametrem $$link) wywala ten sam błąd. Tylko nie mam pojęcia czemu - mimo podania poprawnego wskaźnika połączenia - próbuje użyć danych logowania do bazy z połączenia $$link1.

Czyli konkretnie:
Po nawiązaniu połączenia $$link a następnie $$link1Pada:
  1. <?php
  2. $q1 = "SELECT $database.* FROM $database.firmy order by firma_id";
  3. $r1 = mysql_query($q1, $$link) or die(mysql_error());
  4. ?>


gdzie $database zawiera bazę z $$link. Według mnie - teoretycznie powinno być ok. Jednak wywala właśnie przy tym zapytaniu - błąd:

SELECT command denied to user 'uzytkownik_z_polaczenia_$$link1'@'acr93.rev.netart.pl' for table 'firmy'

Kurcze, już mi nerwy siadają, niby proste zadanie, a nie radzę sobie...
Go to the top of the page
+Quote Post
nevt
post
Post #11





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


pokaż DOKŁADNIE JAK inicjujesz te bazy, jak ustawiasz wszystkie zmienne potrzebne do loginu i jak includujesz te pliki - gdzieś tam masz błąd - jak nie pokażesz tego kodu - nikt ci nie pomoże...
wklej tu kod który testujesz a nie jakieś przykładówki...


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

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
cezet
post
Post #12





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 5.12.2006

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


nevt juz jest ok. Nie przeczytałem Twojego poprzedniego postu, zanim puściłem swojego.

Poszedłem Twoim tokiem, i przyznam szczerze... Sam nie wiedzialem czemu jest $$link, do czego służy i jak się używa.

Ale rzeczywiście - jesteś genialny winksmiley.jpg Ku mojemu zaskoczeniu - ZADZIAŁAŁO JAK TRZEBA winksmiley.jpg))

Dzieki Ci wielkie, przede mną nowe perspektywy winksmiley.jpg)) Masz u mnie piwo biggrin.gif

Dzieki wszystkim za pomoc. Pozdrawiam smile.gif
Go to the top of the page
+Quote Post
rafaelpl
post
Post #13





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 16.01.2008
Skąd: Pszczyna

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


Cytat(nevt @ 20.12.2007, 23:33:03 ) *
$link - dlatego że ten kod był przygotowany do wielokrotnego includowania, a kolega cezet niepotrzebnie go przerabiał, tego się używa mniej więcej tak:
  1. <?php
  2. $link = 'baza1';
  3. include('conn.php');
  4. $link = 'baza2';
  5. include('conn.php');
  6. $sql = 'SELECT * FROM tabela;';
  7. $result1 = mysql_query($sql, $baza1); //wykonuje zapytanie na pierwszej bazie
  8. $result2 = mysql_query($sql, $baza2); //wykonuje zapytanie na drugiej bazie
  9. ?>

i tyle. powodzenia.


Przepraszam za odkopywanie starego tematu, ale nie chciałem zakładać nowego smile.gif

Mam takie pytanie w sprawie kodu nevta... Skierowane do niego, ale może ktoś inny go wyręczy.

Nie popełniłeś może w nim błędu? Gdy się na nim wzorowałem, skrypt nie chciał pobierać danych z bazy...

Dopiero po zmianie na:

  1. <?php
  2. include('conn.php');
  3. $baza1 = $link;
  4. include('conn.php');
  5. $baza2 = $link;
  6. $sql = 'SELECT * FROM tabela;';
  7. $result1 = mysql_query($sql, $baza1); //wykonuje zapytanie na pierwszej bazie
  8. $result2 = mysql_query($sql, $baza2); //wykonuje zapytanie na drugiej bazie
  9. ?>


...wszystko działało prawidłowo.

Chciałbym wiedzieć, czy mój tok rozumowanie jest poprawny, ponieważ mogę coś robić nie tak, a nie chcę mieć dziurawego kodu smile.gif
Go to the top of the page
+Quote Post
nevt
post
Post #14





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


przedstawiona przeze mnie wersja działa, jeżeli nawiązanie połączenia wygląda tak jak w pierwszym poście, czyli przy użyciu podwójnego $$:
  1. <?php
  2. $$link = mysql_connect($server, $username, $password) or die(mysql_error());
  3. ?>

natomiast wersja z poprzedniego postu będzie działać jeżeli użyjesz normalnego podstawienia do zmiennej $link (z pojedynczym $):
  1. <?php
  2. $link = mysql_connect($server, $username, $password) or die(mysql_error());
  3. ?>

poczytaj w manualu o konstrukcji zmienne zmienne i zrozumiesz na czym to polega...


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

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
rafaelpl
post
Post #15





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 16.01.2008
Skąd: Pszczyna

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


Wielkie dzięki, nie miałem pojęcia, że coś takiego istnieje smile.gif
Właśnie się zastanawiałem do czego służą te podwójne $$, ale nie wiedziałem co wpisać w manualu, żeby dokopać się do takich informacji.
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 - 05:02