繁体   English   中英

从空MySQL查询结果中检索列名

[英]Retrieve the column names from an empty MySQL query result

有没有办法检索不返回数据的查询的列名?

我正在使用(有些)复杂的查询,例如:

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)。

任何人?

对于PDO,请尝试PDOStatement->getColumnMeta() 对于mysqli,有mysqli_result->fetch_fields()mysqli_result->fetch_field()mysqli_result->fetch_field_direct() 对于mysql,将其替换为PDO或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检查当前$mysqlz->error 有关错误检查的更多信息,请查看http://www.php.net/manual/en/book.mysqli.php上的PHP mysqli手册。

假设您从PHP调用查询。 即使使用emtpy查询,也可以调用mysqli_fetch_fields

对于AdoDB,您可以使用:

$db->Execute("SELECT .......");  
$colInfo = $res->FieldTypesArray(); 

输出类似于方法MetaColumns($table) ,但您可以在每个结果集上使用它,而不仅仅是表(包括连接)。 它也适用于空结果或空表。

感谢outis ,我在adoDBs mysql-driver中搜索“fetch_field()”后找到了这个函数:D

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM