![]() |
SELFHTML Forumsarchiv |
|
|
Die folgende Nachricht zum Thema stammt von: Ina, 31. 07. 2008, 21:49
Hallo
Such vergebens nach dem Code.
if(-e Table_Beispiel){
print "Table Beispiel ist in MYSQL vorhanden";
}
Vielen Dank im Voraus
Ina
Die folgende Nachricht zum Thema stammt von: Struppi, 31. 07. 2008, 22:23
»» Such vergebens nach dem Code.
»»
»» if(-e Table_Beispiel){
»»
»» print "Table Beispiel ist in MYSQL vorhanden";
»» }
uh, so einfach ist das nicht. Du benötigst dazu das Modul DBI
Struppi.
Die folgende Nachricht zum Thema stammt von: Ina, 31. 07. 2008, 22:29
Hallo Struppi,
In die Datenbank Tabellen anlegen und löschen mit CGI funktioniert ja schon.
MFG
Ina
Die folgende Nachricht zum Thema stammt von: Struppi, 31. 07. 2008, 22:58
»» In die Datenbank Tabellen anlegen und löschen mit CGI funktioniert ja schon.
Das ist schön. du suchst nach einem mySQL Befehl um abzufragen ob eine Tabelle existiert. Den gibt es nicht. Du kannst aber SHOW TABLES dazu verwenden.
Struppi.
Die folgende Nachricht zum Thema stammt von: Ina, 31. 07. 2008, 23:24
Hi Struppi,
Hab's geschafft !
$tabsth2 = $dbh->table_info();
while ($table = $tabsth2->fetchrow_arrayref) {
$sth2 = $dbh->prepare("SELECT * FROM @$table[2]");
$sth2->execute();
$tisch =@$table[2];
if($tisch eq 'Bespiel_Tabelle'){
push(@istda, "$tisch")
}else{push(@istda, "")}
}
print "<H3>@istda</H3>";
Vielen dank für Deine Hlfe
Ina
Die folgende Nachricht zum Thema stammt von: Struppi, 31. 07. 2008, 23:45
»» Hab's geschafft !
Ob das die beste Lösung ist, ist die Frage.
»» $tabsth2 = $dbh->table_info();
zitat:
»» This method can be expensive, and can return a large amount of data. (For example, small Oracle installation returns over 2000 rows.) So it's a good idea to use the filters to limit the data as much as possible.
»» while ($table = $tabsth2->fetchrow_arrayref) {
»» $sth2 = $dbh->prepare("SELECT * FROM @$table[2]");
»» $sth2->execute();
»» $tisch =@$table[2];
»»
»» if($tisch eq 'Bespiel_Tabelle'){
Das verstehe ich nicht ganz. Sieht zumindest nicht logisch aus. Was soll das prepare und execute bewirken?
Struppi.
Die folgende Nachricht zum Thema stammt von: Ina, 01. 08. 2008, 00:00
Hi Struppi,
Hab's geschafft !
$sth2 = $dbh->prepare("SELECT * FROM @$table[2]"); #Zeigt alle Tables an
$sth2->execute(); #glaube ich soetwas wie exit;
MFG
Ina
Die folgende Nachricht zum Thema stammt von: Struppi, 01. 08. 2008, 00:08
»» $sth2 = $dbh->prepare("SELECT * FROM @$table[2]"); #Zeigt alle Tables an
Keine Ahnung was in $tables[2] steht (das @ ist überflüssig), aber das bereitet die Abfrage für alle Datenzeilen der Tabelle vor.
»» $sth2->execute(); #glaube ich soetwas wie exit;
und das führt diese Abfrage aus. Nur verwirft dein Beispiel diese Abfrage. Insofern ist mir nicht klar was du damit anfängt. Mach eine Abfrage mit show tables, das dürfte das einfachste sein.
Struppi.
Die folgende Nachricht zum Thema stammt von: Vinzenz Mai, 01. 08. 2008, 00:47
Hallo Struppi,
»» und das führt diese Abfrage aus. Nur verwirft dein Beispiel diese Abfrage. Insofern ist mir nicht klar was du damit anfängt. Mach eine Abfrage mit show tables, das dürfte das einfachste sein.
Nö. Viel einfacher ist - wie ich bereits vor zwei Tagen schrieb - eine Abfrage des INFORMATION_SCHEMA. Kein Grund, irgendeine herstellerspezifische Syntax zu lernen oder nachzuschlagen, statt dessen wohlbekannte SELECT-Syntax.
Freundliche Grüße
Vinzenz
Die folgende Nachricht zum Thema stammt von: Struppi, 01. 08. 2008, 10:01
»» »» und das führt diese Abfrage aus. Nur verwirft dein Beispiel diese Abfrage. Insofern ist mir nicht klar was du damit anfängt. Mach eine Abfrage mit show tables, das dürfte das einfachste sein.
»»
»» Nö. Viel einfacher ist - wie ich bereits vor zwei Tagen schrieb - eine Abfrage des INFORMATION_SCHEMA. Kein Grund, irgendeine herstellerspezifische Syntax zu lernen oder nachzuschlagen, statt dessen wohlbekannte SELECT-Syntax.
(Vor zwei Tagen war ich nicht da)
Aber ehrlich gesagt verstehe ich das nicht. Was ist SCHEMA_NAME was ist INFORMATION_SCHEMA? Wie kann ich daraus eine Abfrage machen? Was gibt sie sie zurück?
Übrigens auch DBI->table_info baut wohl darauf auf, aber auch das verstehe ich nicht. Ich bekomme zwar Rückgabewerte, aber ich werd aus der Erläuterung nicht schlau, wie ich daraus die info für eine spezifische Tabelle ziehen kann.my $sth = $DBH->table_info();
my $d = $sth->fetchall_arrayref();
Gibt mir eine lange Liste mit allen Tabellen und 5 Eigenschaften zurück. Dann ist es auf jeden Fall einfacher mit show tables, da kann ich auch noch mit LIKE filtern.
Die Frage war ja, wie kann man feststellen ob eine Tabelle existiert?
Struppi.
Die folgende Nachricht zum Thema stammt von: Vinzenz Mai, 01. 08. 2008, 14:35
Hallo
»» »» Nö. Viel einfacher ist - wie ich bereits vor zwei Tagen schrieb - eine Abfrage des INFORMATION_SCHEMA. Kein Grund, irgendeine herstellerspezifische Syntax zu lernen oder nachzuschlagen, statt dessen wohlbekannte SELECT-Syntax.
»» Die Frage war ja, wie kann man feststellen ob eine Tabelle existiert?
mit folgendem fast intuitiven SQL-Statement,USE INFORMATION_SCHEMA; -- Verwende die Datenbank INFORMATION_SCHEMA
-- nutze ggf. entsprechende API-Funktionen
SELECT -- Gib mir
TABLE_NAME -- den Tabellennamen
FROM -- aus der Tabelle
TABLES -- TABLES
WHERE -- die sich in der
TABLE_SCHEMA = '<datenbankname>' -- bestimmten Datenbank befindet und
TABLE_NAME = '<tabellenname>' -- einen bestimmten Tabellennamen trägt.
Wenn das Ergebnis nicht leer ist, dann existiert die Tabelle in der angegebenen Datenbank.
Freundliche Grüße
Vinzenz
Die folgende Nachricht zum Thema stammt von: Struppi, 01. 08. 2008, 16:40
»» »» Die Frage war ja, wie kann man feststellen ob eine Tabelle existiert?
»»
»» mit folgendem fast intuitiven SQL-Statement,
Ja schön und gut in der Konsole, aber wie ist dies in der Perl API integriert?
Wie kann ich da USE INFORMATION_SCHEMA einbauen?
»» SELECT -- Gib mir
»» TABLE_NAME -- den Tabellennamen
»» FROM -- aus der Tabelle
»» TABLES -- TABLES
»» WHERE -- die sich in der
»» TABLE_SCHEMA = '<datenbankname>' -- bestimmten Datenbank befindet und
»» TABLE_NAME = '<tabellenname>' -- einen bestimmten Tabellennamen trägt.
Dieses SQL statement ruft einen Syntaxfehler hervor. Wenn ich hier INFORMATION_SCHEMA qualifiziert angebe, kommt:
DBD::mysql::st execute failed: Table 'information_schema.tables' doesn't exist at ...\test_db.pl line 33.
Also für mich ist das leider alles andere als intuitiv.
Struppi.
Die folgende Nachricht zum Thema stammt von: Struppi, 01. 08. 2008, 16:46
»» mit folgendem fast intuitiven SQL-Statement,
das ich jetzt mal in der mysql Konsole probiert habe, auch dort funktioniert es nicht.
»» USE INFORMATION_SCHEMA; -- Verwende die Datenbank INFORMATION_SCHEMA
»» -- nutze ggf. entsprechende API-Funktionen
ERROR 1049 (42000): Unknown database 'information_schema'
Struppi.
Die folgende Nachricht zum Thema stammt von: Vinzenz Mai, 01. 08. 2008, 17:12
Hallo Struppi,
»» »» USE INFORMATION_SCHEMA; -- Verwende die Datenbank INFORMATION_SCHEMA
»» »» -- nutze ggf. entsprechende API-Funktionen
»»
»» ERROR 1049 (42000): Unknown database 'information_schema'
welche MySQL-Version? MySQL 5.0.x, d.h. eine Standard-Produktionsversion ist vorausgesetzt :-)
Freundliche Grüße
Vinzenz
Die folgende Nachricht zum Thema stammt von: Struppi, 01. 08. 2008, 21:58
»» »» »» USE INFORMATION_SCHEMA; -- Verwende die Datenbank INFORMATION_SCHEMA
»» »» »» -- nutze ggf. entsprechende API-Funktionen
»» »»
»» »» ERROR 1049 (42000): Unknown database 'information_schema'
»»
»» welche MySQL-Version? MySQL 5.0.x, d.h. eine Standard-Produktionsversion ist vorausgesetzt :-)
5.0.22
Struppi.
Die folgende Nachricht zum Thema stammt von: Vinzenz Mai, 06. 08. 2008, 08:54
Hallo
»» »» »» »» USE INFORMATION_SCHEMA; -- Verwende die Datenbank INFORMATION_SCHEMA
»» »» »» »» -- nutze ggf. entsprechende API-Funktionen
»» »» »»
»» »» »» ERROR 1049 (42000): Unknown database 'information_schema'
»» »»
»» »» welche MySQL-Version? MySQL 5.0.x, d.h. eine Standard-Produktionsversion ist vorausgesetzt :-)
»»
»» 5.0.22
dann machst Du definitiv etwas falsch. Auch in Version 5.0.22 ist das INFORMATION_SCHEMA vorhanden, der Zugriff ist - wie in der von mir verlinkten Doku - auf allen mir zugänglichen MySQL-Servern, auch meiner Testinstallation von 5.0.22 möglich.
Was sagt SELECT VERSION();
Freundliche Grüße
Vinzenz
Die folgende Nachricht zum Thema stammt von: Struppi, 06. 08. 2008, 09:53
»» Was sagt SELECT VERSION();
alles klar, ich hab mich auf phpMyAdmin verlassen, das ist wohl ein Fehler.
+---------------+
| VERSION() |
+---------------+
| 4.1.10-nt-log |
+---------------+
Struppi.
Die folgende Nachricht zum Thema stammt von: Vinzenz Mai, 06. 08. 2008, 16:46
Hallo Struppi,
»» »» Was sagt SELECT VERSION();
»» alles klar, ich hab mich auf phpMyAdmin verlassen, das ist wohl ein Fehler.
die Ausgabe, die Du hier wiedergegeben hast, war in diesem Fall die Version der Client-Bibliotheken, die sind recht neu.
»» +---------------+
»» | VERSION() |
»» +---------------+
»» | 4.1.10-nt-log |
»» +---------------+
Die Serverversion dagegen ist seeehr alt :-(
Freundliche Grüße
Vinzenz
Die folgende Nachricht zum Thema stammt von: Ina, 31. 07. 2008, 23:59
Hi Struppi,
Hab's geschafft !
$sth2 = $dbh->prepare("SELECT * FROM @$table[2]"); #Zeigt alle Tables an
$sth2->execute(); #glaube ich soetwas wie exit;
MFG
Ina
© 1998-2006
Impressum, Software: Classic Forum