Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用pdo php获取sql查询中形成的查询列及其数据类型信息_Php_Mysql_Sql_Pdo - Fatal编程技术网

如何使用pdo php获取sql查询中形成的查询列及其数据类型信息

如何使用pdo php获取sql查询中形成的查询列及其数据类型信息,php,mysql,sql,pdo,Php,Mysql,Sql,Pdo,我试图从查询中获取列的信息,如其数据类型、名称和表名、长度为null或主键 比如说 如果查询是 select Name, price*version as revenue , color as colorType from carsRev 然后,它应该返回列名称,如名称revenue colorType及其数据类型 我正在使用getColumnMeta $stmt = $this->_connection->prepare($query); $stmt-

我试图从查询中获取列的信息,如其数据类型、名称和表名、长度为null或主键

比如说 如果查询是

select Name, price*version as revenue , color as colorType from carsRev 
然后,它应该返回列名称,如名称revenue colorType及其数据类型

我正在使用getColumnMeta

 $stmt = $this->_connection->prepare($query);
            $stmt->execute();
            foreach ( range ( 0, $stmt->columnCount() - 1 ) as $column_index )        { $meta [] = $stmt->getColumnMeta ( $column_index );
            }
            print_r($meta);

但它并没有提供类似于衍生列的收入

出于对
PDO->getColumnMeta
的好奇,我使用以下元素复制了您的测试

在我的配置中,PHP是5.3.10,MySQL是5.5.21

用于创建和馈送表的SQL:

CREATE TABLE `carsrev` (
  `name` varchar(11) NOT NULL,
  `color` varchar(10) NOT NULL,
  `version` int(11) NOT NULL,
  `price` decimal(10,2) NOT NULL,
  PRIMARY KEY (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


INSERT INTO `carsrev` (`name`, `color`, `version`, `price`) VALUES
  ('Cevalo', 'Blue', 1, '10.00'),
  ('Catz', 'Red', 2, '201.50');
PHP代码:

ini_set('display_errors', 'On');
error_reporting(E_ALL);

$connect = new PDO('mysql:host=localhost;dbname=database', 'login', 'password'); 

$query =  "select name, price*version as revenue , color as colorType from carsrev";

$stmt = $connect->prepare($query);

$stmt->execute();

foreach ( range( 0, $stmt->columnCount() - 1 ) as $column_index ) { 
    $meta [] = $stmt->getColumnMeta ( $column_index );
}

print_r($meta);
我得到以下结果(重新格式化为更可读):


如您所见,我可以获得派生列的名称和格式
(NEWDECIMAL)
。我在代码中犯了一些其他错误。
Array ( [0] => Array ( [native_type] => VAR_STRING [pdo_type] => 2 [flags] => 
    Array ( [0] => not_null [1] => primary_key ) [table] => carsrev [name] => name [len] => 33 [precision] => 0 ) 

    [1] => Array ( [native_type] => NEWDECIMAL [pdo_type] => 2 [flags] => 
    Array ( [0] => not_null ) [table] => [name] => revenue [len] => 22 [precision] => 2 ) 

    [2] => Array ( [native_type] => VAR_STRING [pdo_type] => 2 [flags] => 
    Array ( [0] => not_null ) [table] => carsrev [name] => colorType [len] => 30 [precision] => 0 ) )