从MySQL数据库中显示所有表名的PHP代码

13

嗯,我对PHP和SQL / MySQL都很新,所以需要任何帮助。

我感觉我采取了正确的方法。 我在php.net上搜索“MySQL show all table names”,返回了一种被弃用的方法,并建议在SHOW TABLES [FROM db_name] [LIKE 'pattern']上使用MySQL查询。 我不确定“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';
?>

我没有得到任何错误提示,输出内容与所回显的完全一致,但是没有表名。

8个回答

48

您代码中的方括号用于mysql文档中表示可选参数组。它们不应出现在实际查询中。

您实际需要的唯一命令是:

show tables;

如果您想要从特定数据库(比如叫做“books”)获取数据表,那么应该这样写:

show tables from books;

如果你想查找表名符合某个特定模式的表,那么你只需要用到LIKE部分。例如:

show tables from books like '%book%';

这段代码将展示在表名中包含“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.
}

14

对于使用PDO语句的人们

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

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

2
SHOW TABLES

将显示您的数据库中的所有表。如果您想筛选名称,可以使用 LIKE 和通配符 %

SHOW TABLES FROM my_database LIKE '%user%'

这将为您提供所有名称包含“user”的表格,例如:

users
user_pictures
mac_users

etc.


1

查询应该长这样:

SHOW TABLES

SHOW TABLES FROM mydatabase

SHOW TABLES FROM mydatabase LIKE "tab%"

MySQL文档中方括号[]内的内容是可选的。


1

MySQL文档中常用于示例的括号在“真实”的查询中应省略。

另外,似乎您没有在任何地方回显mysql查询的结果。 mysql_query 成功时返回一个mysql资源。PHP手册页面还包括有关如何将mysql结果资源加载到数组中以进行回显和其他操作的说明。


0

//list_tables 表示数据库中的所有表

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

7
如果你要回答一个几年前的问题,请解释一下你的答案为什么比已有的答案更好,或者语言是如何改变以允许你的答案,而之前不行。 - Matthew Ciaramitaro
list_tables 意味着数据库中的所有表。 - Mizanur Rahaman

0

当然,您可以使用SHOW TABLES查询数据库,然后循环遍历所有记录,但这会增加代码行数和工作量。

PHP有一个内置函数可以将所有表格列成一个数组:

mysql_list_tables - 您可以在PHP API页面上找到更多信息。


此函数现已完全删除。 - Naveen DA

0

你需要将mysql_query分配给一个变量(例如$result),然后像正常的数据库结果一样显示这个变量。


这个方法不起作用。还有其他建议吗?我已经更新了我的问题,展示您提出的更改。 - EGHDK
你需要像处理普通结果集一样循环处理 $result:while ($row = mysql_fetch_array($result, MYSQL_NUM)) { echo $row[0]; } - Al_
我认为SQL语法可能有点问题,正如其他地方提到的那样-去掉方括号中的所有内容。 - Al_

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接