php - 显示列名

标签 php mysql database class mysqli

该类用于通过mysqli 管理数据库。我坚持使用准备好的语句来显示给定表的所有列名。

class databaseManager {
    function showTable ($tableName, $mysqli) {
        $stmt = $mysqli -> prepare("SHOW COLUMNS FROM ?");
        $stmt -> bind_param('s', $tableName);
        $stmt -> execute();

        while ($stmt -> fetch) {
            $Field;
        }

        $stmt -> free_result();
    }
}

我收到错误“在非对象上调用成员函数 bind_param()”,但是 $mysqli 连接存在,所以我认为 mysqli -> prepare 是错误的。

编辑:显然我通过了 $mysqli

$databaseManager = new databaseManager();
$databaseManager -> showTable("blog", $mysqli);

最佳答案

首先,您没有进行任何错误处理。 始终检查所有数据库交互的结果。

例如,

$stmt = $mysqli->prepare("SHOW COLUMNS FROM ?");
if (!$stmt) {
    throw new Exception($mysqli->error);
}

因此,您将从数据库中收到一条错误消息。

接下来,您不能通过准备好的语句绑定(bind)标识符。
因此,根据 documentation,您必须将其列入白名单或正确格式化。

顺便说一句,我认为这样的功能没有多大意义。我为此目的使用控制台,其他人通常通过 PHPMyAdmin 查看他们的数据库结构

此外,使用裸 API 也不是最佳选择。通过使用一些抽象层,您可以在一行中编写代码:

function showTable ($tableName) {
    return $this->db->getCol("SHOW COLUMNS FROM ?n", $tableName);
}

虽然您不需要此查询来显示表内容,因为列名始终已存在于结果集中。因此,只需先请求您的数据,然后从中提取列名

通过使用上面提到的这样一个库,它会是这样的

$data  = $this->db->getAll("SELECT * FROM ?n", $tableName);
$names = array_keys($data[0]);

但 PHPMyAdmin 仍然做得更好,试一试

如果您需要某种在线表格编辑器,很少能以如此直接的方式工作。总会有一些问题需要对数据进行预处理或后处理。对于任何复杂的数据结构,您总是以专用代码告终。例如,显示漂亮的列标题。
但是对于一些普通的字符串值,它会起作用。

关于php - 显示列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14789360/

相关文章:

mysql - 如何在mysql中选择具有NULL值的列表 'IN'的所有行?

php - Joomla 检索模块中的当前路线

php - 设置服务器端脚本以连续记录来自数据库中 API 的流式 JSON 数据?

php表单为特定名称上传多个图像

mysql - SQL 数据库中的图像

java - 哪个 Java 线程负责 PostgreSQL 数据库进程?

php - 是否可以在 CodeIgniter 中对 View 进行单元测试?

php - 使用 Visual Studio 在 Cordova 中发生 HTTP POST 失败

php - 使用 SQL 和 PHP 对数据进行分组

mysql - 将参数传递给 MySQL 脚本