该类用于通过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/