使用 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_array
,mysql_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 数据库中的所有表的主要内容,如果未能解决你的问题,请参考以下文章