我想在一个空表上做一个SELECT,但我仍然希望得到一个包含所有列名的记录.我知道还有其他方法可以从表中获取列名,但我想知道是否可以使用某种SELECT查询.
我知道这个在我直接在MySQL中运行时有效:
SELECT * FROM cf_pagetree_elements WHERE 1=0;
Run Code Online (Sandbox Code Playgroud)
但我正在使用PHP + PDO(FETCH_CLASS).这只是给我一个空对象而不是一个包含所有列名的行(带有空值).因此,出于某种原因,查询不适用于PDO FETCH_CLASS.
$stmt = $this->db->prepare ( $sql );
$stmt->execute ( $bindings );
$result = $stmt->fetchAll ( \PDO::FETCH_CLASS, $class );
print_r($result); // Empty object... I need an object with column names
Run Code Online (Sandbox Code Playgroud)
任何人都知道我是否可以尝试另一种方法?
除了W00回答之外,还有一个甚至不需要虚拟表的解决方案
SELECT tbl.*
FROM (SELECT 1) AS ignore_me
LEFT JOIN your_table AS tbl
ON 1 = 1
LIMIT 1
Run Code Online (Sandbox Code Playgroud)
在MySQL中,您可以更改WHERE 1 = 1为justWHERE 1
对于发布了关于SHOW COLUMNS和信息方案的其他答案.OP清楚地说:" 我知道还有其他方法可以从表中获取列名,但我想知道是否可以使用某种SELECT查询."
学着阅读.
无论如何,回答你的问题; 不,你不能.您无法从空表中选择一行.从空表中甚至不是具有空值的行.
但是,您可以申请这样做.
创建一个名为'dummy'的附加表,其中只有一列和一行:
表:假人
dummy_id: 1
Run Code Online (Sandbox Code Playgroud)
就这样.现在你可以这样做一个select语句:
SELECT * FROM dummy LEFT OUTER JOIN your_table ON 1=1
Run Code Online (Sandbox Code Playgroud)
这将始终返回一行.但它也包含'dummy_id'列.然而,你可以忽略那个当然,并使用你想要的(空)数据.
再说一遍,这只是一个使用SELECT语句的技巧.没有默认的方法来完成这项工作.