Ostrzeżenie: mysql_xx
funkcje są przestarzałe od wersji php 5.5 i usunięte od wersji php 7.0 (patrz http://php.net/manual/intro.mysql.php ), użyj mysqli_xx
funkcji lub zobacz odpowiedź poniżej z @Troelskn
Możesz wykonać wiele wywołań mysql_connect()
, ale jeśli parametry są takie same, musisz przekazać wartość true dla parametru „ $new_link
” (czwarty), w przeciwnym razie to samo połączenie zostanie ponownie użyte. Na przykład:
$dbh1 = mysql_connect($hostname, $username, $password);
$dbh2 = mysql_connect($hostname, $username, $password, true);
mysql_select_db('database1', $dbh1);
mysql_select_db('database2', $dbh2);
Następnie do zapytania bazy danych 1 przekaż pierwszy identyfikator linku:
mysql_query('select * from tablename', $dbh1);
a dla bazy danych 2 przekaż drugi:
mysql_query('select * from tablename', $dbh2);
Jeśli nie podasz identyfikatora łącza, zostanie użyte ostatnie utworzone połączenie (w tym przypadku reprezentowane przez $dbh2
), np .:
mysql_query('select * from tablename');
Inne opcje
Jeśli użytkownik MySQL ma dostęp do obu baz danych i znajdują się na tym samym hoście (tzn. Oba DB są dostępne z tego samego połączenia), możesz:
- Pozostaw jedno połączenie otwarte i zadzwoń,
mysql_select_db()
aby przełączać się między nimi w razie potrzeby. Nie jestem pewien, czy jest to czyste rozwiązanie i możesz w końcu zapytać o niewłaściwą bazę danych.
- Podaj nazwę bazy danych, odwołując się do tabel w zapytaniach (np
SELECT * FROM database2.tablename
.). Może to być trudny do wdrożenia.
Przeczytaj również odpowiedź troelskn, ponieważ jest to lepsze podejście, jeśli możesz używać PDO zamiast starszych rozszerzeń.
$dbh2
drugiego tylko w razie potrzeby? Konieczność zmiany wszystkich zapytań dotyczących tego podejścia do pracy prawdopodobnie zajęłaby dni po prostu znalezienie wszystkich ...db_query($query,$db='db1')
a następnie masowo zaktualizować wszystkie stare zapytania,db_query($query)
a następnie niestandardowo zaktualizować niestandardowe dodb_query($query,'db2')
If the link identifier is not specified, the last link opened by mysql_connect() is assumed.
Jeśli używasz PHP5 (i powinieneś, biorąc pod uwagę, że PHP4 jest przestarzałe), powinieneś używać PDO , ponieważ powoli staje się on nowym standardem. Jedną (bardzo) ważną zaletą PDO jest to, że obsługuje parametry powiązane, co sprawia, że kod jest znacznie bezpieczniejszy.
Łączyłbyś się przez PDO, tak jak to:
(Oczywiście zastąp nazwę bazy danych, nazwę użytkownika i hasło powyżej)
Następnie możesz wykonać zapytanie do bazy danych w następujący sposób:
Lub, jeśli masz zmienne:
Jeśli potrzebujesz wielu połączeń otwartych jednocześnie, możesz po prostu utworzyć wiele wystąpień PDO:
źródło
use DATABASENAME
, ale nie widzę sensu?Właśnie ułatwiłem moje życie:
mam nadzieję, że to jest pomocne ... na zdrowie ...
źródło
Zamiast mysql_connect użyj mysqli_connect .
mysqli zapewnia funkcję łączenia wielu baz danych jednocześnie.
źródło
mysql_connect
Wypróbuj poniższy kod:
Możesz pobrać dane powyższego zapytania z obu baz danych, jak poniżej
źródło
mysql_select_db
nawet nie dzwoniąc ani razu - także dwukrotne wywołanie go bez niczego innego w środku jest bezużyteczneJest to najbardziej oczywiste rozwiązanie, którego używam, ale pamiętaj tylko, że jeśli nazwa użytkownika / hasło dla obu baz danych jest dokładnie taka sama na tym samym hoście, to rozwiązanie zawsze będzie korzystało z pierwszego połączenia. Nie mylcie się więc, że to nie działa w takim przypadku. To, co musisz zrobić, to utworzyć 2 różnych użytkowników dla 2 baz danych i będzie działać.
źródło
Jeśli naprawdę nie potrzebujesz w grze więcej niż jednej instancji obiektu PDO, rozważ następujące kwestie:
Zwróć uwagę na brak
dbname=
argumentów konstrukcyjnych.Gdy łączysz się z MySQL za pomocą terminala lub innego narzędzia, nazwa bazy danych nie jest potrzebna od samego początku. Możesz przełączać się między bazami danych, używając
USE dbname
instrukcji za pomocąPDO::exec()
metody.Oczywiście możesz zawinąć to w instrukcję catch try.
źródło
Możesz być w stanie użyć składni MySQLi, co pozwoli ci lepiej sobie z tym poradzić.
Zdefiniuj połączenia z bazą danych, a następnie za każdym razem, gdy chcesz wykonać zapytanie do jednej z bazy danych, określ właściwe połączenie.
Na przykład:
Następnie, aby wyszukać je na tej samej stronie, użyj czegoś takiego:
Przejście na MySQLi w ten sposób pomoże.
źródło
Tak naprawdę nie potrzebujesz
select_db
. Możesz wysłać zapytanie do dwóch baz danych jednocześnie. Najpierw przekaż dotacjęDB1
do wyboruDB2
przezGRANT select ON DB2.* TO DB1@localhost;
. PotemFLUSH PRIVILEGES;
. Wreszcie możesz wykonać „zapytanie do wielu baz danych”, takie jakSELECT DB1.TABLE1.id, DB2.TABLE1.username FROM DB1,DB2
itp. (Nie zapomnij, że potrzebujesz dostępu do „root”, aby użyć polecenia grantźródło
jeśli używasz mysqli i masz dwa pliki db_connection. jak pierwszy jest
drugi to
Więc po prostu zmień nazwę parametru pass w mysqli, takich jak DB1 i DB2. jeśli przekażesz ten sam parametr w mysqli, załóżmy, że DB1 w obu plikach, to druga baza danych już się nie połączy. Więc pamiętaj, kiedy używasz dwóch lub więcej połączeń, podaj inną nazwę parametru w funkcji mysqli
źródło
źródło