2012-03-27 11 views
8

In Ordnung, also bin ich ziemlich neu in PHP und SQL/MySQL, so dass jede Hilfe geschätzt wird.Anzeigen aller Tabellennamen in PHP aus der MySQL-Datenbank

Ich fühle mich wie ich den richtigen Ansatz nahm. Ich suchte php.net nach "MySQL zeige alle Tabellennamen", gab eine veraltete Methode zurück und schlug eine MySQL-Abfrage unter SHOW TABLES [FROM db_name] [LIKE 'pattern'] vor. Ich bin mir nicht sicher, was "Muster" bedeutet, aber ich suchte nach "SQL Wildcard" und bekam die " % "Symbol. Nach allem, was ich gefunden habe, sollte dies funktionieren und die Tabellennamen am Ende ausgeben, tut es aber nicht. Irgendwelche Vorschläge? Danke im Voraus.

<?php 
if ($_REQUEST["username"]=="coke"&&$_REQUEST["password"]=="pepsi"){ 
echo 'You have successfully logged in.'; 
echo '<br />'; 
echo 'These are your tables:'; 
echo '<br />'; 

    $link = mysql_connect("sql2.njit.edu", "username", "password"); 

    mysql_select_db("db_name") or die(mysql_error()); 

    $result = mysql_query('SHOW TABLES [FROM db_name] [LIKE '%']'); 
    echo $result; 
} 
else 
echo 'You did not provide the proper authentication'; 
?> 

Ich bekomme keine Fehler. Die Ausgabe ist genau das Echo, aber keine Tabellennamen.

Antwort

38

Die eckigen Klammern in Ihrem Code werden in der mysql-Dokumentation verwendet, um Gruppen von optionalen Parametern anzugeben. Sie sollten nicht in der eigentlichen Abfrage sein.

Der einzige Befehl, den Sie wirklich brauchen, ist:

show tables; 

Wenn Sie Tabellen aus einer bestimmten Datenbank möchten, lassen Sie uns die Datenbank „Bücher“ sagen, dann wäre es nur sein

show tables from books; 

Sie benötigen der LIKE-Teil, wenn Sie Tabellen finden möchten, deren Namen einem bestimmten Muster entsprechen. z. B.

show tables from books like '%book%'; 

würde Ihnen die Namen von Tabellen anzeigen, die "Buch" irgendwo im Namen haben.

Darüber hinaus wird nur die Abfrage "Tabellen anzeigen" keine Ausgabe produzieren, die Sie sehen können. SQL beantwortet die Abfrage und leitet sie an PHP weiter, aber Sie müssen PHP sagen, dass es auf die Seite zurückkommt.

Da es sich anhört, als wären Sie sehr neu in SQL, würde ich empfehlen, den mysql-Client über die Befehlszeile auszuführen (oder mit phpmyadmin, falls er auf Ihrem System installiert ist). Auf diese Weise können Sie die Ergebnisse verschiedener Abfragen anzeigen, ohne die PHP-Funktionen zum Senden von Abfragen und Empfangen von Ergebnissen durchgehen zu müssen.

Wenn Sie PHP verwenden müssen, ist hier eine sehr einfache Demonstration. Versuchen Sie diesen Code nach der Verbindung zu Ihrer Datenbank:

$result = mysql_query("show tables"); // run the query and assign the result to $result 
while($table = mysql_fetch_array($result)) { // go through each row that was returned in $result 
    echo($table[0] . "<BR>"); // print the table that was returned on that row. 
} 
0

Sie müssen die mysql_query einer Variablen zuweisen (zB $ result), dann diese Variable wie ein normales Ergebnis aus der Datenbank anzeigen.

+0

Dies hat nicht funktioniert. Irgendwelche anderen Vorschläge? Meine Frage wurde aktualisiert, um die von Ihnen vorgeschlagenen Änderungen anzuzeigen. – EGHDK

+0

Sie müssen $ result wie eine normale Ergebnismenge loopen: 'while ($ row = mysql_fetch_array ($ ergebnis, MYSQL_NUM)) { echo $ row [0]; } ' –

+0

auch ich denke, die SQL-Syntax kann ein bisschen aus wie anderswo erwähnt werden - loswerden alles in den eckigen Klammern –

1

Abfragen sollen wie folgt aussehen:

SHOW TABLES 

SHOW TABLES FROM mydatabase 

SHOW TABLES FROM mydatabase LIKE "tab%" 

Dinge aus der MySQL-Dokumentation in eckigen Klammern [] sind optional.

1
SHOW TABLES 

alle Tabellen in Ihrem db zeigen.Wenn Sie die Namen filtern Sie LIKE und Platzhalter verwenden %

SHOW TABLES FROM my_database LIKE '%user%' 

Sie alle Tabellen geben die Namen ist enthalten ‚user‘, zum Beispiel

users 
user_pictures 
mac_users 

usw.

1

Die Klammern, die werden häufig in der mysql-Dokumentation für Beispiele verwendet, sollten in einer 'echten' Abfrage weggelassen werden.

Es scheint auch nicht, dass Sie das Ergebnis der MySQL-Abfrage überall widerhallen. mysql_query gibt eine mysql-Ressource bei Erfolg zurück. Die php-Handbuchseite enthält auch Anweisungen zum Laden der mysql-Ergebnisressource in ein Array für Echos und andere Manipulationen.

6

Für Menschen, die PDO statements

$query = $db->prepare('show tables'); 
$query->execute(); 

while($rows = $query->fetch(PDO::FETCH_ASSOC)){ 
    var_dump($rows); 
} 
0

Sicher, dass Sie Ihre Datenbank mit SHOW TABLES und dann eine Schleife durch alle Datensätze abfragen können, aber das ist zusätzliche Codezeilen und Arbeit verwenden.

PHP a hat in Funktion gebaut alle Tabellen in ein Array für Sie zur Liste:

mysql_list_tables - Sie mehr Informationen über sie an The PHP API page

+0

Diese Funktion jetzt vollständig entfernt. – NaveenDA

1

// list_tables bedeutet Datenbank alle Tabelle finden

$tables = $this->db->list_tables(); 
foreach ($tables as $table) 
{ 
    echo $table; 
} 
+5

Wenn Sie eine Frage beantworten, die Jahre alt ist, erklären Sie bitte, wie Ihre Antwort besser als die Antworten ist, die bereits aufgeführt sind oder wie die Sprache geändert wurde, um Ihre Antwort zu erlauben, wenn es vorher nicht getan hat. –

+0

list_tables bedeutet Datenbank alle Tabelle –

Verwandte Themen