This method is supported in the MySQL 5.0+ driver. It can be used for object hydration:
<?php
$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.PDOStatement::getColumnMeta
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
PDOStatement::getColumnMeta
Референца за `pdostatement.getcolumnmeta.php` со подобрена типографија и навигација.
PDOStatement::getColumnMeta
(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.2.0)
PDOStatement::getColumnMeta — (PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.2.0)
= NULL
Враќа метаподатоци за колона во сет на резултати
Ги добива метаподатоците за колона со индекс 0 во сет на резултати како асоцијативен низ. Некои драјвери можеби не имплементираатPDOStatement::getColumnMeta() , бидејќи е опционално. Сепак, сите PDO драјвери
Параметри
column-
документирани во прирачникот ја имплементираат оваа функција.
Вратени вредности
Колона со индекс 0 во сетот на резултати.
| Име | Име (константа) |
|---|---|
native_type |
Метаподатоци на колона |
driver:decl_type |
Типот на PHP што се користи за претставување на вредноста на колоната. Некои драјвери можеби не имплементираат. |
flags |
Типот SQL што се користи за претставување на вредноста на колоната во базата на податоци. Ако колоната во сетот на резултати е резултат на функција, оваа вредност не се враќа од |
name |
Сите знаменца поставени за оваа колона. |
table |
Името на оваа колона како што го враќа базата на податоци. |
len |
Името на табелата на оваа колона како што го враќа базата на податоци. -1 Должината на оваа колона. Нормално |
precision |
за типови освен децимални со пловечка точка.
0 Должината на оваа колона. Нормално |
pdo_type |
Нумеричката прецизност на оваа колона. Нормално
PDO::PARAM_*
constants. |
Патеката до PHP скриптата што треба да се провери. false ако бараната колона не постои во множеството резултати, или ако не постои множество резултати.
Примери
Пример #1 Враќање метаподатоци за колона
Следниот пример ги прикажува резултатите од враќањето на метаподатоците за една колона генерирана од функција (COUNT) во PDO_SQLITE драјвер.
<?php
$select = $DB->query('SELECT COUNT(*) FROM fruit');
$meta = $select->getColumnMeta(0);
var_dump($meta);
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
array(6) {
["native_type"]=>
string(7) "integer"
["flags"]=>
array(0) {
}
["name"]=>
string(8) "COUNT(*)"
["len"]=>
int(-1)
["precision"]=>
int(0)
["pdo_type"]=>
int(2)
}
Види Исто така
- Враќа број на колони во множеството на резултати - Враќа број на колони во множеството резултати
- Земи број на редови во резултат - Враќа број на редови погодени од последната SQL изјава
Белешки од корисници 6 белешки
I found a short discussion related to this function at
http://www.sitepoint.com/forums/showthread.php?t=497257
I haven't tried it (yet?) but hopefully someone can find it useful.native_type has the following mapping for MySQL:
(tested in PHP 5.4, MySQL 5.7)
INT(11) (PKs) => LONG
TINYINT(4) => TINY
DOUBLE => DOUBLE
VARCHAR => VAR_STRING
CHAR => STRING
DATE => DATE
Functions => VAR_STRING
- DATEFORMAT()
- CONCAT()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",
);This method is supported by sql server too (at least the version of the PDO driver 5.7.1)
Example:
array(8) {
["flags"]=>
int(0)
["sqlsrv:decl_type"]=>
string(12) "int identity"
["native_type"]=>
string(6) "string"
["table"]=>
string(0) ""
["pdo_type"]=>
int(2)
["name"]=>
string(8) "IdCompra"
["len"]=>
int(10)
["precision"]=>
int(0)
}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.
https://gist.github.com/AeonFr/db3b2a8a95753076d9e4da42d29365d2
I basically added this code:
<?php
if ($value === null) {
continue;
}
?>