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

时间:2018-12-09 12:26:49

标签: php mysql pdo

我正在构建一个报表工具,用户可以在其中输入SQL查询,该工具将以CSV文件形式返回结果。除了仅写入CSV文件之外,我还需要在此处执行一些其他逻辑。因此SELECT INTO OUTFILE对我不起作用。

我知道执行用户提供的任意SQL查询都是不好的,但是该工具将仅在内部使用,因此安全性不必在意。另外,我将其限制为仅选择查询。

现在,当我以CSV格式导出数据时,我还想将查询的列名称输出为CSV文件中的第一行。

所以我的问题是,有没有一种方法可以使用PDO在PHP中获取SQL查询的列名?

像Sequel Pro这样的Mysql客户端工具能够在显示查询结果的同时显示列名。因此,我认为应该有可能,但是我找不到它。

2 个答案:

答案 0 :(得分:1)

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

if

您说安全性不是问题,因为该代码只能在内部使用,但是如果您创建一个权限有限的新数据库用户并使用该用户连接到数据库,会发生什么情况。

这样,您可以根据需要在数据库中设置权限,而不必担心用户会删除表。

答案 1 :(得分:1)

在这里,我没有编写完整的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)