Php 没有返回行时检索MySQL列名

Php 没有返回行时检索MySQL列名,php,mysql,Php,Mysql,想知道当查询结果不返回任何行时,是否有办法让MySQL返回列名?问题是我们的系统有时会有多个大型查询: SELECT * FROM table SELECT table1.*, table2.field1, table2.field2 SELECT table1.field1 AS f1, SUM(table2.field1) AS f2 因此,当返回的结果为空时,获取列名的唯一方法是解析查询,并尝试在information_schema表上运行查询。这是可能的,但相当复杂。有什么想法吗?

想知道当查询结果不返回任何行时,是否有办法让MySQL返回列名?问题是我们的系统有时会有多个大型查询:

SELECT * FROM table

SELECT table1.*, table2.field1, table2.field2

SELECT table1.field1 AS f1, SUM(table2.field1) AS f2

因此,当返回的结果为空时,获取列名的唯一方法是解析查询,并尝试在information_schema表上运行查询。这是可能的,但相当复杂。有什么想法吗?

您可以使用的一种技术是在查询上创建一个视图,然后使用视图名称查询
信息\u schema

就是这样,

create view v_JustForColumns as
    <your query here>;

select *
from information_schema.columns
where table_name = 'v_JustForColumns';

drop view v_JustForColumns;
创建视图v_JustForColumns作为
;
挑选*
从信息_schema.columns
其中表_name='v_JustForColumns';
下拉视图v_JustForColumns;

一些MySQL的PHP接口有一个结果集元数据函数,即使结果集没有行,也应该返回信息

  • MySQLi有

  • PDO有,但它被标记为“实验”,这可能只是意味着它没有在所有PDO驱动程序中得到很好的测试


    • 试试下面的方法。这里用实际的模式名替换您的\u模式,用实际的表名替换您的\u表名:

      select column_name from information_schema.columns  
      where not exists(select * from YOUR_SCHEMA.YOUR_TABLENAME) 
      and  table_name='YOUR_TABLENAME';
      

      您希望如何处理数据类型的差异?e、 g.你能预期收到“myDateColumn”而不是日期对象吗?@raina77ow:Reference不是这个问题的答案,因为这个问题是关于如何从查询中获取列名,而不是table@Rimas公平点,投票支持重新开放。