mysql显示表返回全部+1,表格为“行数”作为第一个值

时间:2015-04-22 10:25:41

标签: php mysql

当我最近想在php中列出数据库中的所有表时,我做了简单的MySQL查询:

$tables_query = mysql_query('show tables');
while ($test = mysql_fetch_array($tables_query)) {
    echo "Table: {$test[0]}<br />";
}

第一个结果是

TABLES 105
address_book

我没有名为“TABLES 105”的表,但mysql_num_rows也显示,有105个结果,即使我的数据库只包含104个表

如果我尝试直接在MySql服务器上请求“show tables”,它工作正常,我得到104行的结果。它之前也有用,我似乎无法找到任何相关内容,所以我希望有人可以帮助我。

当我直接调用mysql服务器时,它也会受到影响。我在同一台服务器上获得了另一个用户登录其他数据库的权限,这里完全没有问题。

1 个答案:

答案 0 :(得分:1)

首先,105是如何实现这一点的,这很可能是因为你提到的mysql_num_rows函数实际上取了行fetch_array引起的,但这里&#39 ;在MySQLi上的一个,停止使用MySQL了:

$db = 'test'; // database name
$con = mysqli_connect('localhost', 'username', 'password', $db);
$tables_query = mysqli_query($con, "SHOW TABLES FROM {$db}");
while($table = mysqli_fetch_assoc($tables_query)) {

    echo $table["Tables_in_{$db}"], '<br/>';
}

另一种方法当然是深入研究information_schema

$db = 'test'; // database name
$con = mysqli_connect('localhost', 'root', '', $db);
$tables_query = mysqli_query($con, "SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '{$db}'");
while($table = mysqli_fetch_array($tables_query)) {
    echo $table['TABLE_NAME'], '<br/>';
}