有没有办法检索不返回数据的查询的列名?
我正在使用(有些)复杂的查询,例如:
SELECT
i.*,
ic1.permalink as category_permalink,
ic1.title as category_title,
ic1.sid as category_sid,
ic2.permalink as hook_category_permalink,
ic2.title as hook_category_title,
ic2.sid as hook_category_sid
FROM item i
LEFT JOIN item_to_item_category itic ON i.sid = itic.item_sid
LEFT JOIN item_category ic1 ON ic1.sid = itic.item_category_sid
LEFT JOIN item_category ic2 ON ic1.hook = ic2.sid
WHERE i.uid = ''
LIMIT 0,1
由于WHERE i.uid = ""
,此查询的结果将为空。当没有结果时,有没有办法找到列名?
请注意,我知道使用DESCRIBE
和select column_name from information_schema.columns where table_name='person';
的解决方案,但我需要一个更灵活的解决方案,以适应这些多列查询。
请注意,我仍在使用原始的PHP MySQL扩展(因此没有MySQLi,也没有PDO)。
任何?
答案 0 :(得分:3)
对于PDO,请尝试PDOStatement->getColumnMeta()
。对于mysqli,有mysqli_result->fetch_fields()
,mysqli_result->fetch_field()
和mysqli_result->fetch_field_direct()
。对于mysql,将其替换为PDO或mysqli。
答案 1 :(得分:1)
假设您正在从PHP调用查询。即使使用emtpy查询,也可以调用mysqli_fetch_fields。
答案 2 :(得分:1)
这是一个基于 mysqli 的简单类。此方法也适用于空表。当然,根据需要添加自己的错误检查
Success将从$ table返回一个数字索引的列名数组
失败或非字符串输入将返回 FALSE 。
class mysqlz extends mysqli {
function fetch_table_columns($table) {
if(!is_string($table)) {
return false;
} elseif($obj = $this->query("SHOW COLUMNS FROM " . $table)) {
while($fields = $obj->fetch_object()) {
$columns[] = $fields->Field;
}
return $columns;
} else {
return false;
}
}
}
要使用,请像往常一样首先实例化您的数据库:
$mysql = new mysqlz($host, $user, $pass, $database);
然后,调用方法检索列名:
$columns = $mysql->fetch_table_columns("table_name_here");
根据您的表格,结果数组 var_dump()与此类似:
array(3) { [0]=> string(2) "id" [1]=> string(10) "first_name" [2]=> string(9) "last_name" }
如果method返回false(var_dump返回bool(false)
),您可以使用$mysqlz->error
检查当前错误。有关错误检查的更多信息,请查看http://www.php.net/manual/en/book.mysqli.php上的PHP mysqli手册。
答案 3 :(得分:0)
对于AdoDB,您可以使用:
$db->Execute("SELECT .......");
$colInfo = $res->FieldTypesArray();
输出类似于方法MetaColumns($table)
,但您可以在每个结果集上使用它,而不仅仅是表(包括连接)。
它也适用于空结果或空表。
感谢outis, 在adoDBs mysql-driver中搜索“fetch_field()”之后我找到了这个函数:D