在PHP开发中,获取指定MySQL数据库下的所有表名是一个常见的需求,通常可以通过查询MySQL的系统数据库或者调用扩展自带的方法来实现,不同扩展的实现逻辑略有区别。

通过查询information_schema数据库实现
MySQL的information_schema是一个系统数据库,里面存储了所有数据库的元数据信息,其中tables表就记录了所有数据表的名称、所属数据库等信息,我们可以通过查询这个表来获取目标数据库的所有表名。
使用mysqli扩展实现
首先需要通过mysqli连接MySQL数据库,然后执行查询语句,遍历结果集获取表名:
<?php
// 数据库连接配置
$host = '127.0.0.1';
$user = 'root';
$password = '123456';
$database = 'test_db'; // 目标数据库名
$port = 3306;
// 创建mysqli连接
$conn = new mysqli($host, $user, $password, $database, $port);
// 检查连接是否成功
if ($conn->connect_error) {
die('数据库连接失败:' . $conn->connect_error);
}
// 查询目标数据库的所有表名
$sql = "SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = '$database'";
$result = $conn->query($sql);
$tableList = [];
if ($result && $result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
$tableList[] = $row['TABLE_NAME'];
}
// 输出所有表名
echo '数据库' . $database . '的所有表名:<br/>';
foreach ($tableList as $tableName) {
echo $tableName . '<br/>';
}
} else {
echo '未查询到表名,请检查数据库是否存在或有查询权限';
}
// 释放结果集并关闭连接
$result->free();
$conn->close();
?>
使用PDO扩展实现
PDO是PHP中更通用的数据库扩展,支持多种数据库类型,使用PDO实现获取表名的逻辑如下:
<?php
// 数据库连接配置
$host = '127.0.0.1';
$user = 'root';
$password = '123456';
$database = 'test_db';
$port = 3306;
$dsn = "mysql:host=$host;port=$port;dbname=$database;charset=utf8mb4";
try {
// 创建PDO连接
$pdo = new PDO($dsn, $user, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 查询所有表名
$sql = "SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = :dbName";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':dbName', $database, PDO::PARAM_STR);
$stmt->execute();
$tableList = $stmt->fetchAll(PDO::FETCH_COLUMN);
if (!empty($tableList)) {
echo '数据库' . $database . '的所有表名:<br/>';
foreach ($tableList as $tableName) {
echo $tableName . '<br/>';
}
} else {
echo '未查询到表名';
}
} catch (PDOException $e) {
echo '操作失败:' . $e->getMessage();
}
?>
使用扩展自带方法实现
除了查询系统表,部分扩展也提供了直接获取表名的方法,比如mysqli的list_tables方法:
<?php
$host = '127.0.0.1';
$user = 'root';
$password = '123456';
$database = 'test_db';
$port = 3306;
$conn = new mysqli($host, $user, $password, $database, $port);
if ($conn->connect_error) {
die('连接失败:' . $conn->connect_error);
}
// 直接获取当前数据库的所有表名
$tableResult = $conn->list_tables($database);
if ($tableResult) {
echo '所有表名:<br/>';
while ($tableName = $tableResult->fetch_array()) {
echo $tableName[0] . '<br/>';
}
$tableResult->free();
} else {
echo '获取表名失败';
}
$conn->close();
?>
注意事项
- 使用
information_schema查询时,需要确保数据库用户有访问该系统库的权限,否则会查询失败。 - 查询时最好使用参数绑定,避免SQL注入风险,尤其是数据库名是外部传入的场景。
- 如果目标数据库不存在,查询会返回空结果,需要做对应的空值判断处理。
list_tables方法是mysqli扩展的方法,PDO没有对应的直接方法,需要根据使用的扩展选择实现方式。
PHPMySQL数据库表名information_schema修改时间:2026-06-12 06:30:29