如何获取select查询返回的结果的列名

xwbd5t1u  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(408)

我正在构建一个报告工具,用户可以在其中输入sql查询,该工具将返回csv文件中的结果。除了写入csv文件之外,我还需要在这里执行一些额外的逻辑。所以呢 SELECT INTO OUTFILE 对我不起作用。
我知道执行任意的用户提供的sql查询是不好的,但是这个工具只在内部使用,所以安全性不应该是一个问题。我还将其限制为仅选择查询。
现在,当我以csv格式导出数据时,我还想将查询的列名作为csv文件的第一行输出。
所以我的问题是,有没有一种方法可以使用pdo在php中获取sql查询的列名?
像sequel pro这样的mysql客户机工具能够在显示查询结果的同时显示列名。所以我假设这是可能的,但我找不到。

v7pvogib

v7pvogib1#

这里我没有写完整的pdo连接代码。您可以使用下面的代码/逻辑来获取返回列名。

$stmt = $conn->query("SELECT COUNT(*), first_column, second_column FROM table_name");
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$columns = array_keys($row);

print_r($columns); // array(0 => COUNT(*), 1 => first_column, 2 => second_column)
gzjq41n4

gzjq41n42#

行结果的键是列名。您可以这样显示它们:

$conn = mysqli_connect(YOUR_CONNECTION_INFO);
$result = mysqli_query($conn, YOUR_QUERY);
$row = mysqli_fetch_assoc($result);

foreach ($row as $key=>$value) {
    echo $key;
}

您说过安全性不是问题,因为代码只在内部使用,但是如果您创建一个权限有限的新数据库用户并使用该用户连接到数据库,会发生什么。
这样,您就可以根据需要从数据库中设置权限,而不必担心用户删除表。

相关问题