Ankündigung

Einklappen
Keine Ankündigung bisher.

Tabellennamen in Array ausgeben

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Tabellennamen in Array ausgeben

    Hallo, ich möchte mir ein Script schreiben, welches ich per Cronjob ausführen lasse. Folgendes soll passieren:
    1. Es sollen alle Tabellen einer Datenbank geleert / gelöscht werden.
    2. Die Dump-Datei auf dem Webserver soll eingespielt werden.

    Ich hatte es vorher so, das sich einfach folgenden Befehl ausgeführt habe:

    PHP-Code:
    exec("mysql -u benutzer -p'passwort' datenbankname < dump.sql"); 
    Das funktionierte. Jedoch nur, solange die Tabelle nicht verändert wurde.
    Habe ich z. B. in einer Tabelle etwas ergänzt, wurde mir das nach dem das Script durchgelaufen ist, nicht wieder gelöscht.

    PHP-Code:
    <?php

    error_reporting 
    (E_ALL);  
    ini_set ('display_errors'true); 

    /*
     * Dump einspielen: Cronjob - *KT 
     */

    // Verbindungsdaten
    define('DB_HOST''localhost');
    define('DB_NAME''DBNAME');
    define('DB_USER''DBUSER');
    define('DB_PASS''DBPASS');

    define('DB_DUMP''DUMP.sql');

    // Datenbankverbindung aufbauen
    $pdo 'mysql:host=' DB_HOST ';dbname=' DB_NAME ';';
    $user DB_USER;
    $password DB_PASS;
    $options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');
    try {
        
    $dbh = new PDO($pdo$user$password$options);
    } catch (
    PDOException $e) {
        print 
    "Error!: " $e->getMessage() . "<br/>";
        die();
    }

    $stmt $dbh->prepare("SHOW Tables");
    $stmt->execute();

    $rows = array();
    while (
    $row $stmt->fetch(PDO::FETCH_ASSOC)) {
        
    $rows[] = $row;
    }

    foreach (
    $rows as $row) {
        
    $stmt $dbh->prepare("DROP TABLE " $row['Tables_in_' DB_NAME ''] . "");
        
    $stmt->execute();
    }

    $sql file_get_contents(DB_DUMP);
    $stmt $dbh->prepare($sql);
    $stmt->execute();
    Könnt Ihr mir hier weiterhelfen?
    So werden mir schonmal alle Tabellennamen ausgegeben.

    Danke


  • #2
    Hi,

    Tabelle leeren:

    TRUNCATE TABLE `DeineTABELLE`

    Tabelle löschen:

    DROP TABLE `DeineTabelle`

    Habe ich z. B. in einer Tabelle etwas ergänzt, wurde mir das nach dem das Script durchgelaufen ist, nicht wieder gelöscht.
    Unklar. Was meinst du mit ergänzt?! Spalte? Wert? Wo ist deine Löschfunktion?

    mfg wolf29
    while (!asleep()) sheep++;

    Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

    Kommentar


    • #3
      Das Problem welches ich habe, ich will alle Tabellen leeren, also nicht eine einzelne. Deswegen wollte ich mir alle in einem array ausgeben lassen.
      Ich meine wenn ich in der Tabelle users, einen neuen user anlege, dann das Script laufen lasse, löscht es diesen nicht wieder.

      Kommentar


      • #4
        In deinem Script wird nirgendwo etwas gelöscht... zeige bitte echten, relevanten Code
        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

        Kommentar


        • #5
          Habe den Code oben angepasst.
          Das will so nicht funktionieren und ich finde den Fehler nicht.

          edit:\\ das Leeren hat funktioniert, habe die `` nicht um den Tabellennamen gehabt.
          Wie kann ich denn über PDO einen Dump einspielen?

          Kommentar


          • #6
            1. "funktioniert nicht" ist keine brauchbare Fehlerbeschreibung
            2. Da fehlt mindestens ein Leerzeichen. $stmt = $dbh->prepare("TRUNCATE TABLE" . $row['Tables_in_'.DB_NAME.''] . "");
            Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

            Kommentar


            • #7
              Danke, lag wirklich am Leerzeichen. Er hat mir keinen Fehler ausgespuckt, einfach nichts ausgegeben.
              Wie kann ich denn über PDO einen Befehl, wie den Letzten exec Befehl ausführen?

              edit:\\ Ich denke ich habe es. Kann man den Code so lassen wie oben oder gibt es hier Verbesserungsvorschläge?

              Kommentar


              • #8
                Er hat mir keinen Fehler ausgespuckt, einfach nichts ausgegeben.
                Du hast die Datenbank nicht nach einem Fehler befragt... von alleine gibt die nichts aus.

                Wie kann ich denn über PDO einen Befehl, wie den Letzten exec Befehl ausführen?
                So etwas wie einen Callstack gibt es nicht.
                Wenn du einen Befehl erneut absetzen willst, musst du das mit den bekannten Mitteln tun.
                Ein prepared statement hilft dir insofern, als das du beim Wechsel der Parameter nicht erneut preparen musst, sondern lediglich die neuen Parameter binden.
                Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                Kommentar


                • #9
                  ich glaube ich habe ein Problem. Mit dem Code welchen ich oben geschrieben habe, laufe ich in eine Endlos-Schleife.
                  Mir wird die Datenbank (obwohl das Script nicht mehr läuft!) durchgehend wieder hergestellt ?!

                  Kommentar

                  Lädt...
                  X