39

I'm trying to show all the tables in my database. I've tried this:

$sql = "SHOW TABLES";
$result = $conn->query($sql);
$tables = $result->fetch_assoc();
foreach($tables as $tmp)
{
    echo "$tmp <br>";
}

but it only gives me one table name in a database I know has 2. What am I doing wrong?

1

5 Answers 5

81

How to get tables

1. SHOW TABLES

mysql> USE test;
Database changed
mysql> SHOW TABLES;
+----------------+
| Tables_in_test |
+----------------+
| t1             |
| t2             |
| t3             |
+----------------+
3 rows in set (0.00 sec)

2. SHOW TABLES IN db_name

mysql> SHOW TABLES IN another_db;
+----------------------+
| Tables_in_another_db |
+----------------------+
| t3                   |
| t4                   |
| t5                   |
+----------------------+
3 rows in set (0.00 sec)

3. Using information schema

mysql> SELECT TABLE_NAME
       FROM information_schema.TABLES
       WHERE TABLE_SCHEMA = 'another_db';
+------------+
| TABLE_NAME |
+------------+
| t3         |
| t4         |
| t5         |
+------------+
3 rows in set (0.02 sec)

to OP

you have fetched just 1 row. fix like this:

while ( $tables = $result->fetch_array())
{
    echo $tmp[0]."<br>";
}

and I think, information_schema would be better than SHOW TABLES

SELECT TABLE_NAME
FROM information_schema.TABLES 
WHERE TABLE_SCHEMA = 'your database name'

while ( $tables = $result->fetch_assoc())
{
    echo $tables['TABLE_NAME']."<br>";
}
Sign up to request clarification or add additional context in comments.

6 Comments

or SHOW TABLES IN DB_MANE
There is no reason not to use SHOW TABLES unless the active connection is making use of temporary tables.
@holodoc that's my personal opinion. title of SHOW TABLE's output is something like 'Tables_in_TBL_NAME'. so when executed in client program. So column name is changed. and people don't know about information_schema which has more useful information about DB
Perfect. For some reason I thought that it'd just return an array of the actual tables, not rows.
I like Solution #3 the best. The information_schema.tables table gives me a lot more info. Always nice to look into
|
8

Try this:

SHOW TABLES FROM nameOfDatabase;

Comments

2

SHOW TABLE_NAME is not valid. Try SHOW TABLES

TD

1 Comment

Whoops, meant to change that. I was testing different things and just copy-pasted from my code. It was SHOW TABLES
0

SHOW TABLES only lists the non-TEMPORARY tables in a given database.

https://dev.mysql.com/doc/refman/5.0/en/show-tables.html

Comments

-2
<?php
$dbname = 'mysql_dbname';
if (!mysql_connect('mysql_host', 'mysql_user', 'mysql_password')) {
echo 'Could not connect to mysql';
exit;
}
$sql = "SHOW TABLES FROM $dbname";
$result = mysql_query($sql);
if (!$result) {
echo "DB Error, could not list tables\n";
echo 'MySQL Error: ' . mysql_error();
exit;
}
while ($row = mysql_fetch_row($result)) {
echo "Table: {$row[0]}\n";
}
mysql_free_result($result);
?>
//Try This code is running perfectly !!!!!!!!!!


2 Comments

This is just a code snippet. If it's an actual answer, then it should have some explanation as to how it works and why it's a better answer than the other ones.
I found this useful as a quick snippet to experiment with. Thanks amit!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.