BlackBoard » Design, Programmierung & Entwicklung » Programmieren » PHP Firebird to Mysql » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Firebird to Mysql
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
bomus bomus ist weiblich
Aufsteiger


Dabei seit: 03.11.2004
Beiträge: 53

Firebird to Mysql       Zum Anfang der Seite springen

Hallo zusammen,

Ich hab ein Problem. Ich hab ein kleines php Skript geschrieben aber habe keine Möglichkeit um es zu testen. Da das ich nur wenig Erfahrung mit PHP habe, ich will nur mal fragen ob es funktionieren würde oder ob total falsch geschrieben ist… und wenn falsch ist… bin ich zumindest auf dem richtigen weg? Zunge raus

Der Skript sollte Daten aus eine Firebird Datenbank holen und sie in eine mysql Datenbank schreiben.

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
<?php

$firebirdhost '000.000.000.000:C:/path/firebirddb.fdb';
$firebirdusername 'username';
$firebirdpass 'pass';

$dbh ibase_connect $firebirdhost $firebirdusername $firebirdpass ) or die ("error in db connect");

$stmt="Select * from mytbl";
$info=array(); 

while ($query=ibase_fetch_array($stmt)) 
        { $info[]=array($query['feld1'],$query['feld2'],$query['feld3'],$query['feld4'],$query['feld5']); }

ibase_close($dbh);

$mysqlhost ''
$mysqlusername ''
$mysqlpass ''
$conn mysql_connect$mysqlhost $mysqlusername $mysqlpass ) or die ("error in db connect"); 

foreach ($info as $x) 
    mysql_query("INSERT INTO newtbl ('feld1','feld2','feld3','feld4','feld5') 
            VALUES ('"mysql_escape_string($x['feld1']) ."',
                '"mysql_escape_string($x['feld2']) ."',
                '"mysql_escape_string($x['feld3']) ."',
                '"mysql_escape_string($x['feld4']) ."',
                '"mysql_escape_string($x['feld5']) ."')");
 
mysql_close ($conn); 

?>


Danke Augenzwinkern

__________________
Durch Fehler lernt man viel (es sollte auch für mein Deutsch gelten Augenzwinkern )
16.05.2006 09:33 bomus ist offline E-Mail an bomus senden Beiträge von bomus suchen
LX LX ist männlich
El Comandante en Jefe


images/avatars/avatar-2290.gif

Dabei seit: 25.11.2001
Beiträge: 5.372
Herkunft: Berliner Bronx

Achtung RE: Firebird to Mysql       Zum Anfang der Seite springen

Zwischen Zeile 9 und 11 hast du vergessen, den Query auch auszuführen. Statt

php:
1:
2:
3:
4:
$stmt="Select * from mytbl";
$info=array(); 

while ($query=ibase_fetch_array($stmt))
sollte da also

php:
1:
2:
3:
4:
$stmt=ibase_query("Select * from mytbl");
$info=array(); 

while ($query=ibase_fetch_array($stmt))
stehen. Statt ibase_fetch_array() würde ich dir auch ibase_fetch_assoc() empfehlen, zumal es die andere Funktion laut PHP-Manual gar nicht gibt *g* Der Rest des Codes bleibt davon aber unabhängig.

Im mySQL-Part gehört zwischen Zeile 20 und 22 noch die Auswahl der Datenbank:

php:
1:
mysql_select_db 'dbname' );


Ansonsten haut das schon so in etwa hin. Zu beachten ist natürlich auch, dass in mySQL die entsprechende Tabelle mit gleichen Datentypen wie die alte Tabelle bereits angelegt sein muss.

Gibt es eigentlich einen besonderen Grund, dass du das mittels PHP-Script machen willst und nicht einfach eine Exportroutine für Firebird nutzt, die dir SQL-Code ausspuckt, den du dann in mySQL importieren kannst?

__________________
JS-Games.de - Misled Scripting Skills Gone Mad | Meine Filmkritiken | Urban Photography
Kommt mal in den IRC-Channel: irc.eu.freenode.net | Port 6667 | #blackboard

"Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better."
- Samuel Beckett

16.05.2006 10:30 LX ist offline E-Mail an LX senden Homepage von LX Beiträge von LX suchen
bomus bomus ist weiblich
Aufsteiger


Dabei seit: 03.11.2004
Beiträge: 53

Themenstarter Thema begonnen von bomus
      Zum Anfang der Seite springen

Hi Lx und danke,

Zitat:
Zu beachten ist natürlich auch, dass in mySQL die entsprechende Tabelle mit gleichen Datentypen wie die alte Tabelle bereits angelegt sein muss.

Ich hab mir gedacht weil die Tabelle nur einmal gemacht sein muss es separat machen.

Zitat:
Gibt es eigentlich einen besonderen Grund, dass du das mittels PHP-Script machen willst und nicht einfach eine Exportroutine für Firebird nutzt, die dir SQL-Code ausspuckt, den du dann in mySQL importieren kannst?

Der Grund wäre das ich gar nix über Firebird Datenbanken kenne. Auch wenn ich ein Bisschen in google gesucht habe und auch ein wenig darüber gelesen, habe ich nichts gefunden was man als Exportroutine bezeichnen könnte. Die Idee wäre natürlich schön wenn ich es wüsste wie man das macht Augen rollen
Noch etwas, Die mySQL Datenbank muss nicht nur einmal aktualisiert werden sondern periodisch.

Danke noch mal

Bomus

__________________
Durch Fehler lernt man viel (es sollte auch für mein Deutsch gelten Augenzwinkern )
16.05.2006 17:34 bomus ist offline E-Mail an bomus senden Beiträge von bomus suchen
LX LX ist männlich
El Comandante en Jefe


images/avatars/avatar-2290.gif

Dabei seit: 25.11.2001
Beiträge: 5.372
Herkunft: Berliner Bronx

Achtung       Zum Anfang der Seite springen

Wenn du die Datenbanken periodisch synchronisieren willst, solltest du aber die mySQL-Datenbank vor jedem Durchlauf leeren, da sich sonst die Einträge doppeln, gelöschte Einträge nicht entfernt werden oder es zu Schlüsselkollisionen kommen kann.

Ein
php:
1:
mysql_query 'TRUNCATE newtbl' );
sollte bereits ausreichen dafür.

Wegen der Exportroutine: Ich hab keine Ahnung von Firebird-Datenbanken, ging aber davon aus, dass es etwas ähnliches wie mysqldump auch dafür gibt. Offenbar ist dem nicht so, aber ich habe hier etwas gefunden, was zumindest die Daten einer Firebird-Datenbank als SQL-Datei exportieren kann. Je nach dem, wie gut der Output davon ist, könnte man das dem PHP-Weg vorziehen.

__________________
JS-Games.de - Misled Scripting Skills Gone Mad | Meine Filmkritiken | Urban Photography
Kommt mal in den IRC-Channel: irc.eu.freenode.net | Port 6667 | #blackboard

"Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better."
- Samuel Beckett

16.05.2006 17:47 LX ist offline E-Mail an LX senden Homepage von LX Beiträge von LX suchen
phlox81 phlox81 ist männlich
Bote des Lichts und Moderator


images/avatars/avatar-2264.jpg

Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo

      Zum Anfang der Seite springen

Zitat:
Original von LX
Wenn du die Datenbanken periodisch synchronisieren willst, solltest du aber die mySQL-Datenbank vor jedem Durchlauf leeren, da sich sonst die Einträge doppeln, gelöschte Einträge nicht entfernt werden oder es zu Schlüsselkollisionen kommen kann.


Oder sie löscht die exportierten Daten aus der Firebird Tabelle, könnte
sinnvoller sein, wenn die Daten in der MySQL tabelle länger vorgehalten werden sollen.

Die exportroutine sieht ziemlich gut aus, wäre evtl. recht einfach in ein Skript
ein zu bauen, welches dann die Daten automatisch ex/importiert.

__________________
Intelligenz ist eine Illusion des Menschen

phlox81.de | codenode.de
16.05.2006 17:58 phlox81 ist offline E-Mail an phlox81 senden Homepage von phlox81 Beiträge von phlox81 suchen
bomus bomus ist weiblich
Aufsteiger


Dabei seit: 03.11.2004
Beiträge: 53

Themenstarter Thema begonnen von bomus
      Zum Anfang der Seite springen

Zitat:
Original von Phlox
Oder sie löscht die exportierten Daten aus der Firebird Tabelle, könnte

Die Daten müssen in beide Datenbanken bleiben. Besser gesagt bestimmte Felder einer Tabelle müssen „immer“ gleich in beide Datenbanken sein. Also, kann ich nicht die exportierten Daten aus der Firebird löschen.

Zitat:
Original von Phlox
Die exportroutine sieht ziemlich gut aus, wäre evtl. recht einfach in ein Skript ein zu bauen

Wie gesagt würde ich gerne machen wenn ich wusste wie das geht... (oder wenn ich mehr Erfahrung mit php hätte Augenzwinkern )
Würde ich auch gerne lernen wenn ich etwas darüber finden könnte

Bomus

__________________
Durch Fehler lernt man viel (es sollte auch für mein Deutsch gelten Augenzwinkern )

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von bomus: 16.05.2006 18:29.

16.05.2006 18:25 bomus ist offline E-Mail an bomus senden Beiträge von bomus suchen
phlox81 phlox81 ist männlich
Bote des Lichts und Moderator


images/avatars/avatar-2264.jpg

Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo

      Zum Anfang der Seite springen

Dann musst du sicherstellen, das keine Datensätze doppelt eingetragen werden.
Da wäre es sinnvoll evtl. mal was über die Struktur der Tabelle zu wissen.
Gibts da eine art Timestamp wo man sehen kann, wann ein Datensatz geschrieben wurde?
Dann könnte man das benutzen, um festzustellen, welche Datensätze
neu sind, und nach mysql übertragen werden müssen.

Wie groß ist denn die Tabelle?

__________________
Intelligenz ist eine Illusion des Menschen

phlox81.de | codenode.de
16.05.2006 18:49 phlox81 ist offline E-Mail an phlox81 senden Homepage von phlox81 Beiträge von phlox81 suchen
bomus bomus ist weiblich
Aufsteiger


Dabei seit: 03.11.2004
Beiträge: 53

Themenstarter Thema begonnen von bomus
      Zum Anfang der Seite springen

Um das zu sagen muss ich auch nachfragen. Das wäre nur am Donnerstag möglich. Aber danke euch beide. Augenzwinkern

....

Also, bevor ich Phlox Frage antworten kann, wollte ich mal noch fragen:

So wie ich es verstehe
php:
1:
mysql_query 'TRUNCATE newtbl' );
sollte erstmal alles aus der neue Tabelle löschen.

Dann alle Daten aus Firebird (inklusive die Daten die bereits aus der MySQL gelöscht wurden aber die immer noch in Firebird sind) werden wider in MySQL geschrieben.

Hab ich das richtig verstanden?

__________________
Durch Fehler lernt man viel (es sollte auch für mein Deutsch gelten Augenzwinkern )

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von bomus: 17.05.2006 06:55.

16.05.2006 18:55 bomus ist offline E-Mail an bomus senden Beiträge von bomus suchen
phlox81 phlox81 ist männlich
Bote des Lichts und Moderator


images/avatars/avatar-2264.jpg

Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo

      Zum Anfang der Seite springen

Zitat:
Original von bomus
So wie ich es verstehe
php:
1:
mysql_query 'TRUNCATE newtbl' );
sollte erstmal alles aus der neue Tabelle löschen.

Dann alle Daten aus Firebird (inklusive die Daten die bereits aus der MySQL gelöscht wurden aber die immer noch in Firebird sind) werden wider in MySQL geschrieben.

Hab ich das richtig verstanden?


Ja, alles wird dann immer wieder rüber geschrieben.
Ich glaube das macht keinen Sinn, jedes mal die ganze Tabelle zu kopieren.
Das sind ja irgendwann mal ein paar GB evtl.
Deshalb ja auch die Frage nach dem Timestamp, wenns keinen gibt, frag mal
vorsichtig nach, ob man da nicht einen einbauen könnte, wäre auch interessant
zu wissen wo die daten genau herkommen, ob die nicht direkt in die mysql geschmissen werden können z.b.

phlox

__________________
Intelligenz ist eine Illusion des Menschen

phlox81.de | codenode.de
17.05.2006 08:55 phlox81 ist offline E-Mail an phlox81 senden Homepage von phlox81 Beiträge von phlox81 suchen
bomus bomus ist weiblich
Aufsteiger


Dabei seit: 03.11.2004
Beiträge: 53

Themenstarter Thema begonnen von bomus
      Zum Anfang der Seite springen

Danke erstmal,
Ich werde morgen nachfragen...

....

Also, ich sollte nur sagen:

Die Sache hat sich eigentlich erledigt. Wird
php:
1:
mysql_query 'TRUNCATE newtbl' );
benutzt auch wenn es nicht die Beste Lösung ist. (wichtig ist das ich auch verstanden habe warum es nicht am Besten wäre Augenzwinkern )

Danke auf jedem Fall für die Hilfe smile
Bomus

__________________
Durch Fehler lernt man viel (es sollte auch für mein Deutsch gelten Augenzwinkern )

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von bomus: 18.05.2006 18:39.

17.05.2006 09:07 bomus ist offline E-Mail an bomus senden Beiträge von bomus suchen
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
BlackBoard » Design, Programmierung & Entwicklung » Programmieren » PHP Firebird to Mysql

Forensoftware: Burning Board 2.3.6, entwickelt von WoltLab GmbH