[MySQL] Tabellen loeschen per php?

Suchfunktion

Erfahrenes Mitglied
Hallo,
ich habe vor, einige tabellen aus meienr db zu loeschen per php, da ich kein phpmyadmin oder so habe.

Hier mein Code:
PHP:
<?php
mysql_connect("localhost","name","pw");
mysql_select_db('name');
mysql_query("DROP TABLE IF EXISTS abc_*, def_*, ghi_*, jkl_*;");
?>

Aber was stimmt daran nicht?
Die Tabellen die geloescht werden sollen (alle vorhanden!) werden einfach nich geloescht :(

help me.
 
Hi, ich hab 2 Fragen:
1. Soll das Sternchen eine Wildcard sein?
wenn ja: Ich weiß nicht, ob es bei MySQL anders ist, aber SQL ist normalerweise % das zeichen für eine Wildcard. Probier es doch mal damit!
2. Hast schon mal probiert, statt der Wildcard den genauen Tabellenname anzugeben, um zu prüfen ob damit geht?
 
Hi :)

Ja, also das 'abc_*' steht halt dafuer, alle tabellen, die mit 'abc_' anfangen, auszuwaehlen.

Werde das mal zuhause ausprobieren, danke erstmal :)
 
PHP:
<?php 
mysql_connect("localhost","name","pw"); 
mysql_select_db('name'); 
mysql_query("DROP TABLE IF EXISTS abc_%, def_%, ghi_%, jkl_%;");
?>

waere es so richtig?

Wenn ja, dann muss ich noch einen anderen Fehler haben..
Fehlermeldung:
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '%, def_%, ghi_%, jkl_%' at line 1



Achja:
Einzeln loeschen, also z.B.
PHP:
mysql_query("DROP TABLE IF EXISTS abc_foo;");
funktioniert ohne Probleme!

Naja und falls jetz kommt 'dann loesch sie doch einzeln', dann muss ich leider wiedersprechen:
Es sind 241 tabellen :confused:
 
PHP:
$result = mysql_list_tables($dbname);

if (!$result) {
   echo "DB Fehler, Tabellen können nicht angezeigt werden\n";
   echo 'MySQL Fehler: ' . mysql_error();
   exit;
}

while ($row = mysql_fetch_row($result)) {
   $tns = substr($row[0], 0, 4);
   if($tns=="abc_" OR $tns=="def_" OR $tns=="ghi_" OR $tns=="jkl_"){
       mysql_query("DROP TABLE ".$row[0]);
   }
}
Ungetestet, lass Dir lieber vorher die Tabellennamen anzeigen bevor Du löscht ;)
 
Suchfunktion hat gesagt.:
PHP:
<?php 
mysql_connect("localhost","name","pw"); 
mysql_select_db('name'); 
mysql_query("DROP TABLE IF EXISTS abc_%, def_%, ghi_%, jkl_%;");
?>

waere es so richtig?

Wenn ja, dann muss ich noch einen anderen Fehler haben..
Fehlermeldung:
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '%, def_%, ghi_%, jkl_%' at line 1

Hi,

vielleicht geht es ja nicht, dass du mehre Wildcards in die Bedingung setzt. Es wird ja nicht abc_% angemeckert. Wenn alles nix hilft, für halt 4 einzelne Queries aus, eine pro Bedingung, falls es Probleme mit mehreren Wildcards gibt, was mich zwar wundern würde :confused:

achso, eins ist mir noch aufgefallen:
Bei MSSQL oder Oracle müsste man statt abc_% 'abc_%' schreiben, da es ja Strings sind. Das wäre auch noch eine Möglichkeit, die du testen köntest.
(Sorry, wegen den ganzen Vermutungen, hab null Erfahrungen mit MySQL)
 
So, ich habs jetz endlich.. das nenn ich mal nen erfolgserlebnis. :)
Moah ich hoffe meine freundin kommt heute noch ;)


Also hier mein gesamter (funktionierender) Code (inkl. Ausgabe im Fenster)
PHP:
<?php
echo "Datenbankverbindung herstellen";
mysql_connect("localhost","name","pw");
echo "<br><em>   --> okay</em><br>";

echo "Variablen initialisieren";
$zeile = 0;
$result = mysql_list_tables('dbname');
echo "<br><em>   --> okay</em><br>";

echo "Datenbank auf Tabellen ueberpruefen";
if (!$result) { 
   echo "DB Fehler, Tabellen können nicht angezeigt werden\n"; 
   echo 'MySQL Fehler: ' . mysql_error(); 
   echo "<strong>   --> Abbruch</strong>";
   exit; 
} 
echo "<br><em>   --> okay</em><br>";

echo "Tabellen bearbeiten:";
while ($row = mysql_fetch_row($result)) { 
	$tns = substr($row[0], 0, 3); 
	if($tns=="abc" OR $tns=="def" OR $tns=="ghi" OR $tns=="jkl"){ 
		$zeile = $zeile + 1;
		mysql_query("DROP TABLE ".$row[0]);
		echo "<br>- zeile " . $zeile . " geloescht";
	}
}
echo "<br><em>   --> okay</em><br>";
echo "<strong><p>Vorgang abgeschlossen. " . $zeile . " Tabellen geloescht.</strong>";
?>

Ich glaube so langsam steige ich in PHP durch.. is echt eine angenehme sprache, manchmal :suspekt: :suspekt: :suspekt:

Naja also ich habe nurnoch ein Problem:
Ich moechte den Datenbanknamen in einer Variablen abspeichern, fuer den fall dass ich ihn spaeter noch brauche (is halt wie ihr wisst ein wenig uebersichtlicher als wenn ich 1000 mal den datenbanknamen in den quellcode schreibe) und dasnn nurnoch mit der Variablen zu arbeiten.

Das habe ich so versucht:
PHP:
$dbname = "dbnme"
$result = mysql_list_tables($dbname);

Allerdings funktioniert das leider nicht,
kann mir jemand sagen wieso?

Wenn ich das genau so in meinen Code einbaue, dann wird nur eine leere Seite angezeigt, auch das vorherige "Datenbankverbindung herstellen" usw. wird nicht angezeigt :(

Wo sitzt nu der fehler?

Danke an euch allen erstmal!
(Und besonders grossen Dank an German fuer die Idee mit dem Substring ;) Danke!)


Hat sich erledigt! hatte nur nen ; vergessen ^^ trotzdem danke :)
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück