2015-05-11 7 views
6

Mam dwa serwery obsługujące dwie różne witryny z dwiema oddzielnymi bazami danych. Jednak niektóre dane muszą zostać udostępnione - dlatego istnieje CRON, który działa, aby skopiować dane z pierwszej witryny do drugiej witryny. Te dwie witryny były używane do uruchamiania na tym samym serwerze, ale teraz je rozdzieliliśmy, więc próbuję zmienić PHP, aby móc sobie z tym poradzić.Jak wstawić wartość zwracaną jednego polecenia SQL do innej tabeli przy użyciu PHP

Oto kod, gdzie jestem napotkania problemu:

$sql = "SELECT * FROM site1.events"; 
$events = mysql_query($sql, $site1db); 

$sql = "INSERT INTO site2.events SELECT * FROM $events"; 
$doIt = mysql_query($sql, $site2db); 

Teraz wiem, że SELECT * FROM site1.events jest udane, ale nie można wstawić do drugiej strony i nie widzę jakichkolwiek błędów . Nigdy wcześniej nie napisałem PHP (jest to starsze zadanie), więc jeśli jest to coś, co zostało wcześniej omówione - wskaż mi właściwy kierunek.

Należy pamiętać, że site2.events jest obcięty przed tymi poleceniami, więc nie jest konieczne porównywanie.

+0

Użyj 'mysqli' zamiast' mysql'. Nie jestem pewien, w jaki sposób obsługuje on wiele serwerów, ale można się przyjrzeć tabelom stowarzyszonym. – Coloco

+0

'$ events' jest zasób mysql i nie sądzę, możesz użyć go jako ciąg, ale można napisać' * FROM ($ sql) ', ponieważ' $ sql' jest ciągiem. Zauważ, że używasz 'mysql_', który jest przestarzały i rozważ użycie' mysqli_' jako @Coloco suggested lub 'PDO'. –

Odpowiedz

3

Będziesz musiał wykonać wiersz po wierszu porównać i skopiuj. To, co próbujesz teraz zrobić, nie może działać. Można użyć INSERT IGNORE INTO site2.events (SELECT * FROM site1.events), jeśli bazy danych działają na tym samym serwerze, a użytkownik bazy danych może uzyskać dostęp do obu baz danych. Minusem tego, podstawowe klucze musiałyby być identyczne lub stracisz dane.

Lepszą alternatywą byłoby po prostu wywołanie witryny1 wywołania zwrotnego zawierającego wszystkie informacje dotyczące tego zdarzenia do witryny2 w momencie dodania nowego wydarzenia.

+0

Dzięki, obawiałem się, że będę musiał wstawić wiersz po rzędzie, ale liczyłem na lepsze rozwiązanie. – ediblecode

+0

Lepszym rozwiązaniem jest modyfikowanie witryn w celu informowania się o zdarzeniach i natychmiastowego dodawania ich do bazy danych. W ten sposób nie masz już żadnych danych w witrynach, dopóki twój cron nie zsynchronizuje bazy danych i nie będziesz musiał wykonywać porównania wiersz po wierszu. – MueR

+0

Nie jest to możliwe z konfiguracją serwera, którą mamy niestety – ediblecode

Powiązane problemy