Hej. Przeszukałem prawie cały internet, ale niestety nie mogę nigdzie dostać wskazówek dot. łączenie się z kilkoma bazami MySQL’a poprzez PDO. Ktoś może tutaj mnie nakieruje w jaki sposób mogę to zrobić?
Jeżeli zły dział, to sorki.
Hej. Przeszukałem prawie cały internet, ale niestety nie mogę nigdzie dostać wskazówek dot. łączenie się z kilkoma bazami MySQL’a poprzez PDO. Ktoś może tutaj mnie nakieruje w jaki sposób mogę to zrobić?
Jeżeli zły dział, to sorki.
Nie do końca rozumiem co chcesz osiągnąć. Ale skoro chcesz się łączyć z wieloma bazami to po prostu połącz się z każdą z osobna i tyle. Ale chyba nie rozumiem problemu do końca.
if ( \IPS\Settings::i()->wkBans_enabled_SB )
{
$pdo = new \PDO('mysql:host='.\IPS\Settings::i()->wkBans_host_SB.';dbname='.\IPS\Settings::i()->wkBans_base_SB.';port='.$port, \IPS\Settings::i()->wkBans_user_SB, \IPS\Settings::i()->wkBans_password_SB );
$stmt = $pdo->query("SELECT * FROM sb_bans WHERE RemoveType IS NULL AND ip = '$stmtMemberIP' LIMIT 1");
}
if ( \IPS\Settings::i()->wkBans_enabled_AMX )
{
$pdo = new \PDO('mysql:host='.\IPS\Settings::i()->wkBans_host_AMX.';dbname='.\IPS\Settings::i()->wkBans_base_AMX.';port='.$port, \IPS\Settings::i()->wkBans_user_AMX, \IPS\Settings::i()->wkBans_password_AMX );
$stmt = $pdo->query("SELECT * FROM amx_bans WHERE player_ip = '$stmtMemberIP' LIMIT 1");
}
$pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);PTION);
To nie ma sensu, chcę to jakoś zgrabniej napisać.
Ale co nie ma sensu? Kompletnie nie wiem co chcesz osiągnąć. Nie opisałeś problemu. Chcesz się połączyć z dwoma bazami to po prostu użyj
$pdo = new \PDO('mysql:host='.\IPS\Settings::i()->wkBans_host_SB.';dbname='.\IPS\Settings::i()->wkBans_base_SB.';port='.$port, \IPS\Settings::i()->wkBans_user_SB, \IPS\Settings::i()->wkBans_password_SB );
$pdo1 = new \PDO('mysql:host='.\IPS\Settings::i()->wkBans_host_AMX.';dbname='.\IPS\Settings::i()->wkBans_base_AMX.';port='.$port, \IPS\Settings::i()->wkBans_user_AMX, \IPS\Settings::i()->wkBans_password_AMX );
I po prostu odwołuj się do odpowiedniego handlera.
Dobra, to już ogarnąłem. To teraz tak. Mam:
foreach($stmt as $value)
{
$value[‘name’] = $value[‘name’];
$data[] = $value;
}
Co teraz mogę zrobić, jeżeli w jeden bazie jest NAME, a w drugiej PLAYER_NAME, w jaki sposób mogę to połączyć do jednej zmiennej?
Ale ja też cie nie rozumie
Masz np. 2 bazy a takiej samej strukturze rekordu czy o innej i co chcesz s tych bas uzyskać.
Może mieć otwarte 2 ole dane bierzesz w danej chwili z jednej, każdej możesz mieć inną nazwę bo pobiera z niej do jakieś innej zmiennej abo do 3 bazy
Tzn może mieć B1 nazwa B2 nazwax a tworzysz nazway raz z tej raz z tej
Chodzi ci o to że np
$stmt = $pdo->query(‘SELECT id, nazwa, FROM baza 1’)
$stmt = $pdo->query(‘SELECT id, nazwa1, FROM baza2’)
i chcesz to wbić do nazwa3?
Skrypt działa na tej zasadzie, że pobiera aktualny adres IP osoby przeglądającej stronę, jeżeli jego IP w bazie danych 1 lub 2 znajduję się, to wyskoczy mu informacja, niestety ale bazy mają inną strukturę. Więc chciałbym aby zmienna $value[‘name’] odwoływała się do tych dwóch struktur, czyli coś typu $value[‘name’] = $value[‘name’] ? $value[‘player_name’] ;
A potem przez echo czy coś innego wywołuję $value[‘name’];
Ja dawno php nie używałam ale to trzeba zrobić ta:
Pobierasz IP, ja bym ją zrobił jako zmienna ‘adres’
Robisz zmienną na boolean/ false
i teraz sprawdzi jedna bazę- jeżeli adres = name to zmienna true
i tak z drugą z PLAYER_NAME
jeżeli zmienna pozostanie true to jest adres a jeżeli nie to go nie ma
samymi skryptami z PDO chyba tego nie zrobisz
Nie mam teraz podręcznika z instukcjami, ja używam JAVA i C++, więc bez instukcji to by mi było trudno napisać
Po to właśnie robi się warstwy abstrakcji. Zrób sobie interfejs (np. IBaza) i dziedzicz po nim dwie klasy - jedną do obsługi jednej bazy (z metodami do pobierania id, nazwa i zwracaniem wyniku jako ustandaryzowanego obiektu), drugą po drugiej (do pobierania id, nazwa1 - i zwracaniem jako ten sam typ co w poprzednim przykładzie).
Zamiast odwoływać się bezpośrednio do zapytań bazodanowych ($pdo) odwołasz się do konkretnej implementacji interfejsu - którą stworzysz na podstawie Twojego ifa. Nic dalej nie musisz zmieniać.