2012-03-27 25 views
8

申し訳ありませんが、私はPHPとSQL/MySQLがかなり新しくなっています。MySQLデータベースからすべてのテーブル名を表示する

私は正しいアプローチを取ったように感じます。私は "MySQLのすべてのテーブル名を表示する"のphp.netを検索し、廃止されたメソッドを返し、MySQLクエリを使用して提案しましたSHOW TABLES [FROM db_name] [LIKE 'pattern'] "パターン"の意味はわかりませんが、 "SQLワイルドカード" %記号。私が見つけたすべてによると、これは動作し、最後にテーブル名を出力するはずですが、そうではありません。助言がありますか?前もって感謝します。

<?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'; 
?> 

エラーはありません。出力は正確にエコーされたものですが、テーブル名はありません。

答えて

38

コード内の角括弧は、オプションパラメータのグループを示すためにmysqlドキュメントで使用されています。それらは実際のクエリに含まれるべきではありません。

あなたが実際に必要とする唯一のコマンドは次のとおりです。

show tables; 

あなたが特定のデータベースからテーブルをしたい場合は、のは、データベース「本を」と言ってみましょう、それはあなたが唯一の必要

show tables from books; 

だろう名前が特定のパターンに一致するテーブルを検索する場合は、LIKE部分を使用します。たとえば、

show tables from books like '%book%'; 

には、名前のどこかに「本」があるテーブルの名前が表示されます。

さらに、「show tables」クエリを実行しても表示される出力は生成されません。 SQLはクエリーに応答し、それをPHPに渡しますが、PHPにページにエコーするように指示する必要があります。

あなたはSQLに慣れていないようですので、コマンドラインからmysqlクライアントを実行することをお勧めします(システムにphpmyadminがインストールされている場合)。このようにして、クエリを送信し結果を受け取るためのPHPの関数を経由することなく、さまざまなクエリの結果を確認することができます。

PHPを使用する必要がある場合は、ここでは非常に簡単なデモンストレーションです。あなたのデータベースに接続した後、このコードを試してみてください。

$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

mysql_queryを変数(たとえば$ result)に代入し、データベースからの通常の結果と同じようにこの変数を表示する必要があります。

+0

これは機能しませんでした。その他の提案はありますか?あなたの提案した変更を表示するために私の質問を更新しました。 – EGHDK

+0

通常の結果セットと同じように$ resultをループする必要があります: 'while($ row = mysql_fetch_array($ result、MYSQL_NUM)){ echo $ row [0]; } ' –

+0

また、私はSQL構文が他のところで述べたようにビットオフかもしれないと思う - 角括弧の中のすべてを取り除く –

1

クエリは次のようになります。

SHOW TABLES 

SHOW TABLES FROM mydatabase 

SHOW TABLES FROM mydatabase LIKE "tab%" 

角括弧内のMySQLのドキュメントから物事[]はオプションです。

1
SHOW TABLES 

はあなたのDB内のすべてのテーブルを表示します。あなたはLIKEを使用する名前とワイルドカード%

SHOW TABLES FROM my_database LIKE '%user%' 

をフィルタリングする場合は、あなたの名前だが、「ユーザー」を含め、すべてのテーブルを与える、例えば

users 
user_pictures 
mac_users 

など

1

カッコこと例はmysqlのマニュアルでよく使われていますが、実際のクエリでは省略する必要があります。

mysqlクエリの結果をどこにでも表示しているようには見えません。 mysql_queryは成功するとmysqlリソースを返します。 PHPマニュアルページには、エコーやその他の操作のためにmysql結果リソースを配列にロードする方法も含まれています。 PDO statements

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

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

PHPがあなたのために、アレイ内のすべてのテーブルを一覧表示する機能が組み込まれています:

mysql_list_tablesを - あなたはThe PHP API page

0

あなたはすべてのレコードをSHOW TABLES、その後、ループを使用してデータベースを照会することができます確かにそれは余分なコード行と仕事をされ使用している人々のために

+0

この機能は完全に削除されました。 – NaveenDA

1

// list_tablesでそれについての詳細な情報を見つけることができますが、すべてのテーブルのデータベースを意味し、

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

あなたが何歳かの質問に答えようとしている場合は、あなたの回答が既にリストされている回答よりも優れているかどうかを説明してください。 –

+0

list_tablesはデータベース全体のテーブルを意味します –

関連する問題