Ergebnis 1 bis 13 von 13

Thema: Hilfe bei PHP / Bash / SQL Anwendungen

  1. #1

    Hilfe bei PHP / Bash / SQL Anwendungen

    Hallo Leute,

    in bin gerade am verzweifeln, da ich seit 10 Stunden an ein Problem sitze und es einfach nicht gelöst bekomme. Folgendes ist der Sachverhalt:

    Es geht um Open FOG, ein Projekt bei dem man Computer imagen kann, dieses setzt auf PHP und MySQL. Jetzt haben wir in unserer Firma einen kleinen Sonderfall, bei dem die integrierte Replikation von FOG nicht nutzen können und selber schreiben müssen. Entsprechend gibt es dann auch zwei MySQL Datenbanken, eine bei dem Server der hier steht und eine an dem Ort, wohin Repliziert werden soll. Jetzt stehe ich tatsächlich vor der Aufgabe, wie ich eine Zeile einer Tabelle auf die andere hinmigriere. Folgende Struktur hat die Tabelle:

    Code:
    `imageID` int(11) NOT NULL,
      `imageName` varchar(40) NOT NULL,
      `imageDesc` longtext NOT NULL,
      `imagePath` longtext NOT NULL,
      `imageProtect` mediumint(9) NOT NULL,
      `imageMagnetUri` longtext NOT NULL,
      `imageDateTime` timestamp NOT NULL DEFAULT current_timestamp(),
      `imageCreateBy` varchar(50) NOT NULL,
      `imageBuilding` int(11) NOT NULL,
      `imageSize` varchar(255) NOT NULL,
      `imageTypeID` mediumint(9) NOT NULL,
      `imagePartitionTypeID` mediumint(9) NOT NULL,
      `imageOSID` mediumint(9) NOT NULL,
      `imageFormat` char(1) DEFAULT NULL,
      `imageLastDeploy` datetime NOT NULL,
      `imageCompress` int(11) DEFAULT NULL,
      `imageEnabled` enum('0','1') NOT NULL DEFAULT '1',
      `imageReplicate` enum('0','1') NOT NULL DEFAULT '1',
      `imageServerSize` bigint(20) UNSIGNED NOT NULL DEFAULT 0
    und bei der Zieldatenbank ist es genau das selbe. Ich hatte jetzt mehrere Ideen. Als erstes über PHP, da habe ich mir alle werte über
    Code:
    SELECT * FROM `images` WHERE `imageID`=2
    in eine Variable geben lassen, fetch_array laufen lassen und wollte dann inserten. Pustekuche, wollte er nicht.

    Zweite Idee, über shell_exec lasse ich ein Bash Skript laufen, dass
    Code:
    mysql --user=foga --password=2123135 --database=fog --host=127.0.0.1 --execute="SELECT * FROM `images` WHERE `imageID`=2 INTO OUTFILE '/var/lib/transfer/sql.tmp' FIELDS TERMINATED BY ',';"
    ausgibt und dann im nächsten Schritt wieder importiert. Auch das geht nicht, manchmal habe ich falsch gequotet, manchmal falsche Variablen gesetzt. Ich bin am Ende Ich habe noch nie PHP gecoded und nach 10 Stunden try and error, wovon 3 Stunden nun auf diese scheiss Datenbank Übertragung draufgingen platzt mir der Kopf und hoffe auf Hilfe von euch

    Ich kann mir sehr gut vorstellen, dass ich es bereits im PHP Skript hinbekommen würde alle Werte per SELECT in ein Array zu schreiben, und es dann in der zweiten DB ein INSERT / UPDATE zu machen.

    Liebe grüße
    Stephan
    Bananarama und Peanutbutterjellytime!

    Verteiler von leckeren Keksen!
    Und Nürnberg ist eine so sichere Stadt, da kann der Autoschlüssel stecken bleiben :D

  2. #2

    Re: Hilfe bei PHP / Bash / SQL Anwendungen

    Was nutzt du in PHP? PDO?

    Habe es gerade getestet, auf dem gleichen host, sollte aber keinen unterschied machen. Meine Datenbank hat eine Tabelle "items"


    Code:
    aufbau von "items":
    id: int(11)
    path: text
    pattern: text
    comment: text
    hash: text
    lineNumber: varchar(10)
    date: date
    status: int

    Code (PHP):
    1.  
    2. // request
    3. // aufbau verbindung
    4. $pdo = new PDO('mysql:host=localhost;dbname=test', 'rootuser', 'rootpass');
    5. // prepare beachte die :id
    6. $statement = $pdo->prepare("SELECT * FROM items WHERE id = :id");
    7. // id muss hier in einem assoc array mitgegeben werden, sonst gibts Fehler (to few statements)
    8. $statement->execute(['id' => 1]);
    9. // hole alle werte die zutreffen
    10. // FETCH_ASSOC um gleich an assoc array zu kriegen und kein object
    11. $q = $statement->fetchAll(PDO::FETCH_ASSOC);
    12.  
    13.  
    14. // insert
    15. // verbindung zur entfernten db
    16. $pdo = new PDO('mysql:host=localhost;dbname=test2', 'rootuser', 'rootpass');
    17. // gleiches wie oben, die werte mit : sind wichtig
    18. $statement = $pdo->prepare("INSERT INTO items (id, path, pattern, comment, hash, lineNumber, date, status) VALUES (:id, :path, :pattern, :comment, :hash, :lineNumber, :date, :status)");
    19. // alle daten vom request als parameter mitgeben
    20.  // $q[0] weil $statement->fetchAll() ein array zurückgibt, du könntest auch nur $statement->fetch(PDO::FETCH_ASSOC) nutzen, dann brauchst du auch kein [0]
    21. $statement->execute($q[0]);
    22.  
    Für diesen Beitrag bedankt sich Localhorst

  3. #3
    Keks-Verteiler

    News-Redakteur

    (Threadstarter)

    Avatar von Localhorst
    Registriert seit
    Nov 2014
    Beiträge
    840
    ngb:news Artikel
    91

    Re: Hilfe bei PHP / Bash / SQL Anwendungen

    @KingJamez: Ich hab das über mysqli gelöst wenn du das meinst. Kurzer snippet:

    Code (PHP):
    1.  
    2.  
    3. $link = mysqli_connect("logalhost", "s3cret", "alsosecret", "db"); //connect Database
    4.  
    5. if($result2 = $link->query("SELECT `imageID`,`imageName`,`imageDesc`,`imagePath`,`imageProtect`,`imageMagnetUri`,`imageDateTime`,`imageCreateBy`,`imageBuilding`,`imageSize`,`imageTypeID`,`imagePartitionTypeID`,`imageOSID`,`imageFormat`,`imageLastDeploy`,`imageCompress`,`imageEnabled`,`imageReplicate`,`imageServerSize` FROM `images`"))
    6.  
    7.  
    Ich probier das später mit dem PDO aus

    --- [2019-12-18 16:04 CET] Automatisch zusammengeführter Beitrag ---

    @KingJamez:

    Ich habe mal den entsprechend angepasst, AAAAAAAber die endDB bleibt immer noch leer o.O

    Code (PHP):
    1.  
    2. $imageID=11;
    3. // request
    4. // aufbau verbindung
    5. $pdo = new PDO('mysql:host=localhost;dbname=db1', 'secret', 'secret2');
    6. // prepare beachte die :id
    7. $statement = $pdo->prepare("SELECT * FROM items WHERE id = :imageID");
    8. // id muss hier in einem assoc array mitgegeben werden, sonst gibts Fehler (to few statements)
    9. $statement->execute(['id' => $imageID]);
    10. // hole alle werte die zutreffen
    11. // FETCH_ASSOC um gleich an assoc array zu kriegen und kein object
    12. $q = $statement->fetchAll(PDO::FETCH_ASSOC);
    13.  
    14. // insert
    15. // verbindung zur entfernten db
    16. $pdo = new PDO('mysql:host=remotehost;dbname=db_dev', 'secret', 'D4kNVRkFlEbqaE1r');
    17. // gleiches wie oben, die werte mit : sind wichtig
    18. $statement = $pdo->prepare("INSERT INTO items (imageID, imageName, imageDesc, imagePath, imageProtect, imageMagnetUri, imageDateTime, imageCreateBy, imageBuilding, imageSize, imageTypeID, imagePartitionTypeID, imageOSID, imageFormat, imageLastDeploy, imageCompress, imageEnabled, imageReplicate, imageServerSize) VALUES (:imageID, :imageName, :imageDesc, :imagePath, :imageProtect, :imageMagnetUri, :imageDateTime, :imageCreateBy, :imageBuilding, :imageSize, :imageTypeID, :imagePartitionTypeID, :imageOSID, :imageFormat, :imageLastDeploy, :imageCompress, :imageEnabled, :imageReplicate, :imageServerSize)");
    19. // alle daten vom request als parameter mitgeben
    20.  // $q[0] weil $statement->fetchAll() ein array zurückgibt, du könntest auch nur $statement->fetch(PDO::FETCH_ASSOC) nutzen, dann brauchst du auch kein [0]
    21. $statement->execute($q[0]);
    22.  
    23.  
    Wie gesagt, das ende bleibt leer Any Idea wie ich nun debugge?
    Geändert von Localhorst (18.12.19 um 15:15 Uhr)
    Bananarama und Peanutbutterjellytime!

    Verteiler von leckeren Keksen!
    Und Nürnberg ist eine so sichere Stadt, da kann der Autoschlüssel stecken bleiben :D

  4. #4

    Re: Hilfe bei PHP / Bash / SQL Anwendungen

    was gibt dir denn das aus? Damit solltest du den gesamten Datensatz deiner Quelldb bekommen.

    Code (PHP):
    1.  
    2. $imageID=11;
    3. $pdo = new PDO('mysql:host=localhost;dbname=db1', 'secret', 'secret2');
    4. $statement = $pdo->prepare("SELECT * FROM items WHERE id = :imageID");
    5. $statement->execute(['id' => $imageID]);
    6. $q = $statement->fetchAll(PDO::FETCH_ASSOC);
    7.  var_dump($q);
    8.  
    Kleiner Umbau, zum testen der Verbindung, betrifft beide "connects"

    Code (PHP):
    1.  
    2. // quelle
    3. $pdo = new PDO('mysql:host=localhost;dbname=db1', 'secret', 'secret2');
    4. $statement = $pdo->prepare("SELECT * FROM items WHERE id = :imageID");
    5. if(!$statement) {
    6.     echo 'PDO ERROR <br>';
    7.     print_r($pdo->errorInfo());
    8. }
    9. // select wie oben
    10. $pdo = new PDO('mysql:host=remotehost;dbname=db_dev', 'secret', 'D4kNVRkFlEbqaE1r');
    11. $statement = $pdo->prepare("INSERT INTO items (imageID, imageName, imageDesc, imagePath, imageProtect, imageMagnetUri, imageDateTime, imageCreateBy, imageBuilding, imageSize, imageTypeID, imagePartitionTypeID, imageOSID, imageFormat, imageLastDeploy, imageCompress, imageEnabled, imageReplicate, imageServerSize) VALUES (:imageID, :imageName, :imageDesc, :imagePath, :imageProtect, :imageMagnetUri, :imageDateTime, :imageCreateBy, :imageBuilding, :imageSize, :imageTypeID, :imagePartitionTypeID, :imageOSID, :imageFormat, :imageLastDeploy, :imageCompress, :imageEnabled, :imageReplicate, :imageServerSize)");
    12. if(!$statement) {
    13.     echo 'PDO ERROR <br>';
    14.     print_r($pdo->errorInfo());
    15. }
    16. // inserten wie oben
    17.  
    Für diesen Beitrag bedankt sich Localhorst

  5. #5
    Keks-Verteiler

    News-Redakteur

    (Threadstarter)

    Avatar von Localhorst
    Registriert seit
    Nov 2014
    Beiträge
    840
    ngb:news Artikel
    91

    Re: Hilfe bei PHP / Bash / SQL Anwendungen

    @KingJamez: Danke dir vielmals! Also ich den ersten Umbau gemacht habe mit var_dump hab ich gesehen, das Array war leer. Und dann viel es mir wie Schuppen von den augen. Ich hatte den falschen Tabellennamen angegeben Da kann es natürlich nichts werden

    Danke die viel vielmals! Dann wäre mein komplettes Skript bald fertig. Muss dann nur noch ein paar Update Querys einbauen, aber dann läufts. Nochmal, vielen vielen Dank!!!
    Bananarama und Peanutbutterjellytime!

    Verteiler von leckeren Keksen!
    Und Nürnberg ist eine so sichere Stadt, da kann der Autoschlüssel stecken bleiben :D

  6. #6

    Re: Hilfe bei PHP / Bash / SQL Anwendungen

    Zitat Zitat von Localhorst Beitrag anzeigen
    Und dann viel es mir wie Schuppen von den augen. Ich hatte den falschen Tabellennamen angegeben Da kann es natürlich nichts werden
    Sowas hab ich mir fast gedacht, deshalb hab ich auch gleich mal den var_dump mit angehängt. Mit PDO lässt es sich deutlich angenehmer arbeiten als mit mysqli, ein paar updatequeries sind da relativ einfach gemacht.

  7. #7
    Zeitreisender

    Administrator

    Avatar von drfuture
    Registriert seit
    Jul 2013
    Ort
    in der Zukunft
    Beiträge
    6.157
    ngb:news Artikel
    17

    Re: Hilfe bei PHP / Bash / SQL Anwendungen

    Das sollte eigentlich effizienter über Datenbank Replikation gehen. Sag kannst du auch auf einzelne Tabellen beschränken

    https://blog.pythian.com/best-practi...ation-filters/
    |_|D *`~{ Ich kenne deine Zukunft }~´* |_|D

  8. #8
    Keks-Verteiler

    News-Redakteur

    (Threadstarter)

    Avatar von Localhorst
    Registriert seit
    Nov 2014
    Beiträge
    840
    ngb:news Artikel
    91

    Re: Hilfe bei PHP / Bash / SQL Anwendungen

    @drfuture: Hey Doc,

    danke dir für den Tipp. Jedoch wird das in diesem Fall leider nicht zu 100% passen, da auf den anderen Nodes die Informationen doch leicht abweichen werden. Nachdem ich nun die Grundstruktur meines Codes habe fiel mir auf das es nicht zu 100% passt, weil ich eben auch die imageID mitgebe. Ist eben schon lange her gewesen das ich mir SQL gearbeitet habe. Den Code werde ich dann die nächsten Tage entsprechend umschreiben. Ich weiß in der Struktur welches der Index ist. Ansonsten zerschiesse ich mir glaube ich etwas mit dem Auto Increment falls sich das Anwendungsgebiet doch mal ändert. Es war bei mir eben eine Hürde wieder mit PHP anzufangen und ich hatte immer schon Probleme Daten in eine Datenbank zu schreiben. Aber mir der Hilfestellung von @KingJamez habe jetzt einen weg über PDO dann die Daten doch hineinzuschreiben. Entsprechend muss ich dann schauen wie ich einen if Schalter baue, der dann anstatt eines INSERT ein UPDATE macht. Wird mich noch einige Tage kosten, aber momentan macht das Projekt wirklich Spaß und ist das erste mal das es auch wirklich gebraucht wird
    Bananarama und Peanutbutterjellytime!

    Verteiler von leckeren Keksen!
    Und Nürnberg ist eine so sichere Stadt, da kann der Autoschlüssel stecken bleiben :D

  9. #9
    Zeitreisender

    Administrator

    Avatar von drfuture
    Registriert seit
    Jul 2013
    Ort
    in der Zukunft
    Beiträge
    6.157
    ngb:news Artikel
    17

    Re: Hilfe bei PHP / Bash / SQL Anwendungen

    Wenn sich der Inhalt ändern soll sind sonst "Trigger" noch eine Option das ganze trotzdem innerhalb der Datenbank zu regeln.
    Wobei ich mir da gerade auch nicht sicher bin ob mysql / Mariadb das über 2 DB-Server hinweg hin bekommt (zur not müsste man über eine zwischentabelle gehen und diese dann replizieren).
    Da du schon fast fertig bist nicht mehr so wichtig - nur falls es mal "flotter" oder mit weniger Ressourcen laufen soll - weiß ja nicht wie viel sich in der Tabelle so ändert
    |_|D *`~{ Ich kenne deine Zukunft }~´* |_|D

  10. #10

    Re: Hilfe bei PHP / Bash / SQL Anwendungen

    Zitat Zitat von Localhorst Beitrag anzeigen
    @drfuture: Entsprechend muss ich dann schauen wie ich einen if Schalter baue, der dann anstatt eines INSERT ein UPDATE macht.
    Idee1: mach eine Anfrage an die Zieldatenbank, wenn der Eintrag dort existiert, dann update, ist er nicht da, dann Insert. - relativ Aufwändig und braucht auch mehr resourcen
    Idee2: erstell in der source Datenbank eine extra zelle, in der du speicherst ob die Daten schon portiert wurden, prüfe diesen beim holen - erfordert eingriff in die Source DB, könnte aber leichter nutzbar sein.
    Für diesen Beitrag bedankt sich Localhorst

  11. #11
    Keks-Verteiler

    News-Redakteur

    (Threadstarter)

    Avatar von Localhorst
    Registriert seit
    Nov 2014
    Beiträge
    840
    ngb:news Artikel
    91

    Re: Hilfe bei PHP / Bash / SQL Anwendungen

    @KingJamez: Danke, ich bin aber gerade einfach nen anderen Weg gegangen Ich weiß das ImageName nur einmal existieren darf. Also habe ich ein Delete Query gebaut der den Namen löscht. Habs mir halt dadurch einfach gemacht, aber so what Habs getestet, es läuft und bin mega mega happy
    Bananarama und Peanutbutterjellytime!

    Verteiler von leckeren Keksen!
    Und Nürnberg ist eine so sichere Stadt, da kann der Autoschlüssel stecken bleiben :D

  12. #12
    Mitglied
    Registriert seit
    Jul 2013
    Ort
    /dev/null
    Beiträge
    2.601

    Re: Hilfe bei PHP / Bash / SQL Anwendungen

    Wenn ImageName sowieso eindeutig ist, dann lösch die Spalte ImageID und verwende ImageName als Primary Key.

  13. #13
    Keks-Verteiler

    News-Redakteur

    (Threadstarter)

    Avatar von Localhorst
    Registriert seit
    Nov 2014
    Beiträge
    840
    ngb:news Artikel
    91

    Re: Hilfe bei PHP / Bash / SQL Anwendungen

    @musv: Das ist ja das bescheuerte ... sowohl ImageName und ImageID sind eindeutig, weil eine andere Tabelle auf ImageID verweist, das kam wiederrum von dem Software entwickler ^^
    Bananarama und Peanutbutterjellytime!

    Verteiler von leckeren Keksen!
    Und Nürnberg ist eine so sichere Stadt, da kann der Autoschlüssel stecken bleiben :D

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •