使用 PHP 列出 MySQL 数据库中的所有表

Posted

技术标签:

【中文标题】使用 PHP 列出 MySQL 数据库中的所有表【英文标题】:List all the tables in your MySQL database using PHP 【发布时间】:2016-10-17 09:08:33 【问题描述】:

我很难列出数据库中的所有表。


我试过了

<?php 

//Configuration
$dbname      = 'local';
$user        = 'root';
$host        = '127.0.0.1';
$pass        = '';
$date        = date('Y-m-d');
$export_type = 'mysql'; // option : mysql | psql
$file_name   = $date.'-portal';
$file_path   = $file_name;



// Create connection
$conn = mysqli_connect($host, $user, $pass);

// Check connection
if ($conn->connect_error) 
    die("Connection failed: " . $conn->connect_error);


echo "Connected successfully";

$sql = "SHOW TABLES FROM $dbname";
$res = mysqli_query($conn, $sql);

if($res != false)

    echo "Connected successfully";
    $FILE = fopen("output.csv", "w");

    $table = array();
    while($row = mysql_fetch_array($res))
       $table[] = $row['0'];
    

    foreach($tables as $table) 
        $columns = array();
        $res = mysqli_query($conn, "SHOW COLUMNS FROM $table");

        while($row = mysql_fetch_array($res, MYSQL_NUM)) 
            $columns[] = "$row[0]";
        
        fwrite($FILE, implode(",", $columns)); fwrite("\n");
        $resTable = mysqli_query($conn, "SELECT * FROM $table");

        while($row = mysql_fetch_array($resTable, MYSQL_NUM)) 
            fwrite($FILE, implode(",", $row)); fwrite("\n");
        
    
else
    die(mysql_error());


?>

结果

if($res != false)
//.. everything in here never get executed


`$res` kept returning `false`. 

我做错了什么可能导致这种情况?

【问题讨论】:

mysql_fetch_array 应该是 mysqli_fetch_arraymysql_error 应该是 mysqli_error($conn)。有更好的吗? PDO 版本:***.com/a/27467588/4357238 【参考方案1】:

你需要在连接脚本中通过你的数据库。

像这样:

$conn = mysqli_connect($host, $username, $pass, $dbname);

然后,当您想从表中提取行时,您可以这样做:

mysqli_query($conn, "SELECT rows FROM table");

这对您不起作用的原因之一是您没有通过连接传递您的数据库名称。此外,您没有执行上述查询,而是从数据库中选择了一个表;而不是表格中的一行。

另外,我注意到您在最后一行使用了mysql_* 错误输出。

【讨论】:

首先,我要查询我数据库中的所有表,而不是我表中的所有行。 其次,我添加了 $dbname 作为我的第四个参数,我的 $res 变量仍然返回 false - 这仍然阻止我的整个代码块执行。 我很清楚这一点。你必须以另一种方式做到这一点。有各种来源指定如何执行此操作。此外,您可以更改要选择的行。我以SELECT *为例【参考方案2】:

在你的连接中使用 db

 mysqli_connect($host, $user, $pass, $dbname);

并使用这样的查询

 $sql = "SHOW TABLES";

【讨论】:

有效。我的 $res 变量现在返回 true。但是你知道如何修复mysql_fetch_array() expects parameter 1 to be resource object given 吗? 检查 mysqli 你在这里拿的是 mysql 而不是 mysqli 我接受你的回答。感谢您的帮助伙伴。 最后,问题,我保证,你知道为什么$res = mysqli_query($conn, "SHOW COLUMNS FROM $table"); 总是返回假。我又做了什么不寻常的事吗? 检查这个:***.com/questions/1526688/…【参考方案3】:

您始终可以执行查询:

Show tables;

选择数据库之后。

顺便说一句,你也可以执行:

Show databases;

列出当前用户有权查看的所有数据库。

【讨论】:

【参考方案4】:

这是一个工作版本

变化:

$dbname 添加到mysqli_connect 函数 在表名之间添加了反引号 ` char,以避免 MySQL 的保留关键字出错 将 mysql_ 函数更改为 mysqli_ 关闭文件 关闭连接

Here 是代码

注意:对不起,我不知道为什么,但是当我将代码粘贴到答案中时,所有的代码识别都搞砸了,即使尝试正确缩进,我也浪费了 10 分钟: (

【讨论】:

以上是关于使用 PHP 列出 MySQL 数据库中的所有表的主要内容,如果未能解决你的问题,请参考以下文章

计算Oracle中的表数

PostgreSQL 对连接中的表数有限制吗?

一个mysql数据库, 最大可以支持多少个表数

如何列出 MySQL 数据库中的所有触发器?

使用头文件cfloat中的符号常量获知浮点类型数据的表数范围---gyy整理

我需要用 php - mysql 列出产品的唯一最新版本