如何在使用 PDO 执行之前识别准备好的语句列名称

How to identify prepared statement column names before execute with PDO

我正在开发一个应用程序来从 MySQL 数据库生成打印报告。这使用布局文件来定义要检索的数据以及如何格式化输出。要检索的数据由 select 语句定义,可以从简单视图到非常复杂的视图。显然,布局的验证需要分析select语句,在mysqli下很简单——准备语句然后使用mysqli_stmt::result_metadata.

使用动态变化的参数计数调用 mysqli_stmt::bind_params 的有据可查的问题促使我查看 PDO,但我遇到的问题是必须在 PDOStatement::getColumnMeta 之前执行准备好的查询用于标识列名。有没有办法在不执行语句的情况下识别准备好的 select 语句列名?

我猜您想获取结果集中每一列的名称和数据类型,然后使用该信息来帮助布置您的报告。

最可靠的方法是执行() 查询。这将列和数据类型的绝对控制权交给了编写布局文件中的 SQL 并对其进行故障排除的人员。我不相信有一个可靠的 MySQL 语句解析器可以在 php 中使用来从 SQL.

中挖掘别名和数据类型

PDO 和 mysqli 都需要您(程序员)执行查询以获取元数据。

如果您可以组织您的报表程序,使其在获取一行结果集后结束其布局,那是一个不错的选择。

或者你也可以执行查询一次追加LIMIT 1,做布局,再执行一次得到数据。但是您的更复杂的查询可能不会从该尝试的优化中获益太多。并且已经包含限制的查询在此方案中不起作用。