【问题标题】:List all the tables in your MySQL database using PHP使用 PHP 列出 MySQL 数据库中的所有表
【发布时间】: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`. 

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

【问题讨论】:

标签: php mysql database


【解决方案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"); 总是返回假。我又做了什么不寻常的事吗?
【解决方案3】:

您始终可以执行查询:

Show tables;

选择数据库之后。

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

Show databases;

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

【讨论】:

    【解决方案4】:

    这是一个工作版本

    变化:

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

    Here 是代码

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

    【讨论】:

      猜你喜欢
      • 2012-11-09
      • 2013-12-09
      • 2014-02-25
      • 1970-01-01
      • 2011-06-09
      • 1970-01-01
      • 2022-10-05
      • 1970-01-01
      相关资源
      最近更新 更多