当我最近想在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服务器时,它也会受到影响。我在同一台服务器上获得了另一个用户登录其他数据库的权限,这里完全没有问题。
答案 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/>';
}