Php pdo column names

PDOStatement::getColumnMeta

Возвращает метаданные столбца результирующей таблицы в виде ассоциативного массива. Индексация столбцов начинается с 0.

Некоторые драйверы PDO могут не реализуют функцию PDOStatement::getColumnMeta() , поскольку она является необязательной. Однако все драйверы PDO, указанные в руководстве, реализуют эту функцию.

Список параметров

Индекс (начиная с 0) столбца результирующего набора.

Возвращаемые значения

Возвращает ассоциативный массив, содержащий следующие значения метаданных:

Метаданные столбца

Имя Значение
native_type Внутренний тип PHP, используемый для представления значения столбца.
driver:decl_type Тип SQL, используемый для представления значения столбца в базе данных. Если значение столбца результирующей таблицы было возвращено из функции, PDOStatement::getColumnMeta() не будет определять этот тип.
flags Какие-либо флаги, установленные для столбца.
name Имя этого столбца, возвращаемое базой данных.
table Имя таблицы этого столбца, возвращаемое базой данных.
len Размер поля столбца. Как правило, для типов, отличных от чисел с плавающей точкой, это значение равно -1 .
precision Числовая точность этого столбца. Как правило, для типов, отличных от чисел с плавающей точкой, это значение равно 0 .
pdo_type Тип PDO значения столбца в виде одной из констант PDO::PARAM_* .

Возвращает false в случаях, когда указанного столбца нет в результирующей таблице, а также если не существует самого результирующего набора.

Примеры

Пример #1 Извлечение метаданных столбца

В следующем примере показаны результаты извлечения метаданных одного столбца, сгенерированного функцией COUNT драйвера PDO_SQLITE.

$select = $DB -> query ( ‘SELECT COUNT(*) FROM fruit’ );
$meta = $select -> getColumnMeta ( 0 );
var_dump ( $meta );
?>

Результат выполнения данного примера:

array(6) < ["native_type"]=>string(7) "integer" ["flags"]=> array(0) < >["name"]=> string(8) "COUNT(*)" ["len"]=> int(-1) ["precision"]=> int(0) ["pdo_type"]=> int(2) >

Смотрите также

  • PDOStatement::columnCount() — Возвращает количество столбцов в результирующем наборе
  • PDOStatement::rowCount() — Возвращает количество строк, затронутых последним SQL-запросом

User Contributed Notes 7 notes

This method is supported in the MySQL 5.0+ driver. It can be used for object hydration:

$pdo_stmt = $dbh -> execute ( ‘SELECT discussion.id, discussion.text, comment.id, comment.text FROM discussions LEFT JOIN comments ON comment.discussion_id = discussion.id’ );

foreach( range ( 0 , $pdo_stmt -> columnCount () — 1 ) as $column_index )
$meta [] = $pdo_stmt -> getColumnMeta ( $column_index );
>

while( $row = $pdo_stmt -> fetch ( PDO :: FETCH_NUM ))
foreach( $row as $column_index => $column_value )
//do something with the data, using the ids to establish the discussion.has_many(comments) relationship.
>
>

?>

If you are building an ORM, this method is very useful to support more natural SQL syntax. Most ORMs require the column names to be aliases so that they can be parsed and turned into objects that properly represent has_one, has_many, many_to_many relationships.

I haven’t tried it (yet?) but hopefully someone can find it useful.

Searching for LONGLONG in php-src:

$datatypes = array(
MYSQLI_TYPE_TINY => «TINY»,
MYSQLI_TYPE_SHORT => «SHORT»,
MYSQLI_TYPE_LONG => «LONG»,
MYSQLI_TYPE_FLOAT => «FLOAT»,
MYSQLI_TYPE_DOUBLE => «DOUBLE»,
MYSQLI_TYPE_TIMESTAMP => «TIMESTAMP»,
MYSQLI_TYPE_LONGLONG => «LONGLONG»,
MYSQLI_TYPE_INT24 => «INT24»,
MYSQLI_TYPE_DATE => «DATE»,
MYSQLI_TYPE_TIME => «TIME»,
MYSQLI_TYPE_DATETIME => «DATETIME»,
MYSQLI_TYPE_YEAR => «YEAR»,
MYSQLI_TYPE_ENUM => «ENUM»,
MYSQLI_TYPE_SET => «SET»,
MYSQLI_TYPE_TINY_BLOB => «TINYBLOB»,
MYSQLI_TYPE_MEDIUM_BLOB => «MEDIUMBLOB»,
MYSQLI_TYPE_LONG_BLOB => «LONGBLOB»,
MYSQLI_TYPE_BLOB => «BLOB»,
MYSQLI_TYPE_VAR_STRING => «VAR_STRING»,
MYSQLI_TYPE_STRING => «STRING»,
MYSQLI_TYPE_NULL => «NULL»,
MYSQLI_TYPE_NEWDATE => «NEWDATE»,
MYSQLI_TYPE_INTERVAL => «INTERVAL»,
MYSQLI_TYPE_GEOMETRY => «GEOMETRY»,
);

I recently added a note to a small function that went through the results of PDOStatement::fetch and mapped columns to integer or float types.

I forgot to test for columns that can have a null value!

I’m updating the code here, sorry.

This website doesn’t let me edit the original comment, so I’m just gonna link to a gist in case it needs even further fixes.

I basically added this code:

Источник

Читайте также:  Javascript html encode json
Оцените статью