Neue Antwort schreiben 
 
Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
MYSQL Datenbank mit PHP bearbeiten
Michael_ Offline
Bier aus Hawaii

Beiträge: 1.414
Registriert seit: Feb 2011
Beitrag #1
MYSQL Datenbank mit PHP bearbeiten
Hallo,

Also ich hab da ein Problem und zwar möchte ich zwei sachen machen MIT PHP.

1.
Ich möchte in einer Datenbank alle Tabellen bis auf ein paar löschen.
Also quasi DELETE ALL TABLES FROM DATABASE_NAME WHERE TABLENAME != "TABLE1" AND WHERE TABLENAME != "TABLE2" AND WHERE TABLENAME !="TABLE3"

2.
Ich möchte in ner Tabelle alle Spalten löschen bis auf ein paar.
Also quasi DELETE ALL ROWS FROM TABLENAME WHERE ROWNAME != "ROW1" AND WHERE ROWNAME !="ROW2" AND WHERE ROWNAME !="ROW3".

Ich habe schon google bemüht aber leider nichts gefunden.
Das ganze muss mit PHP gemacht werden.

Das wird ein Skript das Foren auf Werkszustand zurücksetzt um sie Anschließend zu Updaten (ebenfalls per Skript sowie vollautomatisch) dabei aber die User, Beiträge, Nachrichten etc. beibehält.

Wäre cool wenn ihr mir helfen könnt.
Aber ich glaube mit einem ganz einfachen Query alleine wird das nichts oder?

2018: Intel Xeon E5-1660v2, 128gb 1600MHZ DDR3 ECC RAM, 3x 1000gb SSD, 1x 4000gb HDD, Windows 7 Ultimate 64bit
13.04.2017 19:45
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Michael_ Offline
Bier aus Hawaii

Beiträge: 1.414
Registriert seit: Feb 2011
Beitrag #2
RE: MYSQL Datenbank mit PHP bearbeiten
Bitte helft mir, ich hab mir sonst schon alle funktionen die ich für dieses Teil brauche selbst zusammengebastelt aber hier komme ich einfach nicht weiter.

Code:
<?php

//Verbindung zur Datenbank aufbauen
require("../../admin/_data.inc.php");
@$db = new mysqli("$mysqlhost", "$mysqluser", "$mysqlpassword", "$mysqldb");
if (mysqli_connect_errno()) {
  printf("Verbindung fehlgeschlagen: %s\n", mysqli_connect_error());
  exit();
}

//Einen Ordner mit allen darin liegenden Datein entfernen
//Aufruf: @del_folder_and__files("pfad/zum/verzeichniss/");
function del_folder_and_files ($folder) {
$dir = "$folder";
$verz = opendir($dir);
while ($file = readdir ($verz))
{
  if($file != "." && $file != "..")
  {
   unlink($dir.$file);
  }
}
rmdir($folder);
closedir($verz);
}

//Datein in einem Ordner entfernen
//Aufruf: @del_folder_and__files("pfad/zum/verzeichniss/");
function del_folder_files ($folder) {
$dir = "$folder";
$verz = opendir($dir);
while ($file = readdir ($verz))
{
  if($file != "." && $file != "..")
  {
   unlink($dir.$file);
  }
}
closedir($verz);
}

//Datei verschieben
//Aufruf: move("startfolder", "destinationfolder");
function move ($from, $to) {
   if(!file_exists($to)){
      if (!copy($from, $to)) {
         print ("failed to copy $file...<br>\n");
      }
      else{
         unlink($from);
      }
   }
}  

//Alle Tabellennamen einer MYSQL Datenbank ausgeben
//Aufruf mit: datenbank_tabellen($db, "dbname"); oder datenbank_tabellen($db, $mysqldb);
function datenbank_tabellen($db, $dbname) {
    $result = mysqli_query($db, "SHOW TABLES FROM $dbname") OR die(mysqli_error($db));
while ($row = mysqli_fetch_row($result)) {
echo "AND WHERE tablename != '$row[0]'<br>";
        }
}

//Alle Spaltennamen einer Tabelle einer MYSQL Datenbank ausgeben
//Aufruf mit: datenbank_spalten($db, "tablename");
function datenbank_spalten($db, $table) {
    $result = mysqli_query($db, "SHOW COLUMNS FROM $table") OR die(mysqli_error($db));
    if (mysqli_num_rows($result) > 0) {
        while ($row = mysqli_fetch_assoc($result)) {
echo "AND WHERE fieldname != '$row[Field]'<br>";
        }
    }
}

//Löscht Alle Datein und Unterordner (mit Datein ebenfalls) im Angegeben verzeichnis
//Es können einzelne Verzeichnisse (mit Datein in diesen Verzeichnissen) ausgeschlossen werden.
//Aufruf: DeleteRecursive("verzeichnis");
function DeleteRecursive($absolutePath)
{
$dir = opendir($absolutePath);
$output = "";
while ($pathItem = readdir($dir))
{
if($pathItem != "../../images" && $pathItem != "../../wbb1_rescue_system") //Angepasst an wbb root im Aufruf //Der Inhalt des Images Ordners muss mit der Funktion del_folder_and_files dann noch manuell erledigt werden.
{
   if ($pathItem!='..' && $pathItem!='.')
   {  
     $toDelete = $absolutePath. '/' .$pathItem;    
     if (is_dir($toDelete))
     {    
       $output .= DeleteRecursive($toDelete);
       if (!rmdir($toDelete))
       {
         $output .= 'Ordner "' . $toDelete . '" konnte nicht gelöscht werden <br />';
       }      
     }
     else
     {
       if (!unlink($toDelete))
       {
         $output .= 'Datei "' . $toDelete . '" konnte nicht gelöscht werden <br />';
       }
     }    
   }
}  
}
return $output;
}

//DeleteRecursive("wbboard/del");
//datenbank_tabellen($db, $mysqldb);
//datenbank_spalten($db, "bb1_boards");
//@del_folder_files("del/images/");
//@del_folder_and_files("wbboard/toent/");
//move("wbboard/admin/_data.inc.php", "wbboard/_data.inc.php");                    
?>

2018: Intel Xeon E5-1660v2, 128gb 1600MHZ DDR3 ECC RAM, 3x 1000gb SSD, 1x 4000gb HDD, Windows 7 Ultimate 64bit
13.04.2017 21:40
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
DosAmp Offline
andeq r0, r0, r0

Beiträge: 11.945
Registriert seit: Jul 2008
Beitrag #3
RE: MYSQL Datenbank mit PHP bearbeiten
Nein, du kannst nicht ohne Weiteres in dieser Art am Data Dictionary herumpfuschen. Du musst zunächst die betroffenen Tabellen und Spalten aus diesem abfragen und dann in einer Schleife passende DDL-Anweisungen zusammenbauen.

Code:
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'datenbankname'
AND TABLE_NAME NOT IN ('TABLE1', 'TABLE2', 'TABLE3', ...)

Code:
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'datenbankname'
AND TABLE_NAME = 'tabellenname'
AND COLUMN_NAME NOT IN ('COL1', 'COL2', 'COL3', ...)

Tabelle löschen:
Code:
DROP TABLE datenbank

Spalte(n) löschen:
Code:
ALTER TABLE tabelle DROP spalte1[, DROP spalte2, ...]

Siehe auch diese Scherzantwort, wo Der Doktor mir empfiehlt, das gesamte Winhistory-Forum zu droppen.
Ohne FOREIGN_KEY_CHECKS = 0 kannst du sonst bei Fremdschlüsselabhängigkeiten vermutlich nicht ins Blaue hinein herumlöschen.

(31.01.2017 23:04)Der Doktor schrieb:  
(31.01.2017 22:32)Alpha schrieb:  Das WHF ist die Erlösung.

Schaltet den Mist doch endlich mal ab

Code:
SET FOREIGN_KEY_CHECKS = 0;
SET @tables = NULL;
SELECT GROUP_CONCAT(table_schema, '.', table_name) INTO @tables
  FROM information_schema.tables
  WHERE table_schema = 'database_name'; -- specify DB name here.

SET @tables = CONCAT('DROP TABLE ', @tables);
PREPARE stmt FROM @tables;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET FOREIGN_KEY_CHECKS = 1;

Berühr die Kuh.
Mach es im Nu.

<~Vez> CloverOS would be perfect if you could change the wallpaper
13.04.2017 23:36
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Michael_ Offline
Bier aus Hawaii

Beiträge: 1.414
Registriert seit: Feb 2011
Beitrag #4
RE: MYSQL Datenbank mit PHP bearbeiten
Danke!
Wirklich ich bin dir sehr dankbar, hätte das so wohl nicht hinbekommen sonst. :)

Code:
//Entfernt alle Tabellen die nicht Standartmäßig bestandteil des WBB sind.
//Aufruf über: clean_structure($db, $mysqldb);
function clean_structure ($db, $dbname) {
$ergebnis = mysqli_query($db, "
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = '$dbname'
AND TABLE_NAME NOT IN ('bb1_announcements', 'bb1_avatars', 'bb1_bbcode', 'bb1_boards', 'bb1_config', 'bb1_folders', 'bb1_groups', 'bb1_notify', 'bb1_object2board', 'bb1_object2user', 'bb1_pms', 'bb1_pmsend', 'bb1_poll', 'bb1_posts', 'bb1_ranks', 'bb1_smilies', 'bb1_style', 'bb1_threads', 'bb1_user_table', 'bb1_useronline', 'bb1_vote')
");
while($table = mysqli_fetch_array($ergebnis))
{
mysqli_query($db, "DROP TABLE $table[0]");
}
}

//Entfernt alle Spalten in einer Tabelle die nicht im Aufruf erwähnt werden
//Aufruf über: clean_tables($db, $mysqldb, "tablename", "'columntokeep1', 'columntokeep2', 'columntokeep3'");
function clean_tables ($db, $dbname, $tabletoclean, $columnstokeep) {
$ergebnis = mysqli_query($db, "
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = '$dbname'
AND TABLE_NAME = '$tabletoclean'
AND COLUMN_NAME NOT IN ($columnstokeep)
");
while($column = mysqli_fetch_array($ergebnis))
{
mysqli_query($db, "ALTER TABLE $tabletoclean DROP $column[0]");
}
}

2018: Intel Xeon E5-1660v2, 128gb 1600MHZ DDR3 ECC RAM, 3x 1000gb SSD, 1x 4000gb HDD, Windows 7 Ultimate 64bit
14.04.2017 00:31
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Neue Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste