2015-05-11 10 views
6

Ho due server che ospitano due siti diversi con due database separati. Tuttavia, alcuni dati devono essere condivisi, quindi è in esecuzione un CRON per copiare i dati dal primo sito al secondo sito. Questi due siti venivano eseguiti sullo stesso server, ma ora li abbiamo separati, quindi sto tentando di modificare il PHP per poterlo gestire.Come inserire il valore di ritorno di un comando SQL in un'altra tabella utilizzando PHP

Ecco il codice dove sto incontrando il problema:

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

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

Ora so che il SELECT * FROM site1.events è successo, ma non può inserire nel secondo sito e non sto vedendo alcun tipo di errore . Non ho mai scritto PHP prima (questo è un compito legacy) quindi, se è già stato trattato in precedenza, non indicarmi la giusta direzione.

Si noti che site2.events viene troncato prima di questi comandi, quindi non è necessario alcun confronto.

+0

Utilizzare 'mysqli' invece di' mysql'. Non sono sicuro di come gestisce i server più piccoli ma potresti dare un'occhiata alle tabelle federate. – Coloco

+0

'$ events' è una risorsa mysql e non penso che tu possa usarla come una stringa, tuttavia puoi scrivere' * FROM ($ sql) 'dato che' $ sql' è una stringa. Si noti che si sta utilizzando 'mysql_' che è deprecato e si consideri l'utilizzo di' mysqli_' come suggerito da @Coloco o 'PDO'. –

risposta

3

Si dovrà eseguire una riga per riga confrontare e copiare. Quello che stai tentando di fare adesso non può funzionare. È possibile utilizzare INSERT IGNORE INTO site2.events (SELECT * FROM site1.events) se i database vengono eseguiti sullo stesso server e l'utente del database può accedere a entrambi i database. Lo svantaggio di questo, le chiavi primarie dovrebbero essere identiche o ti mancheranno i dati.

Un'alternativa migliore sarebbe semplicemente avere sito1 effettuare una richiamata contenente tutte le informazioni per quell'evento a sito2 al momento viene aggiunto un nuovo evento.

+0

Grazie, temevo di dover inserire la riga per riga ma speravo in una soluzione migliore. – ediblecode

+0

La soluzione migliore è quella di modificare i siti per informare ciascuno degli eventi e averli immediatamente aggiunti al database. In questo modo, non ci sono più dati mancanti dai siti finché il cron non sincronizza il database e non dovrai eseguire un confronto riga per riga. – MueR

+0

Questo non è possibile con la configurazione del server che abbiamo purtroppo – ediblecode

Problemi correlati