mysqli_result::fetch_field_direct

mysqli_fetch_field_direct

(PHP 5, PHP 7, PHP 8)

mysqli_result::fetch_field_direct -- mysqli_fetch_field_directRuft die Metadaten für eine einzelne Spalte ab

Beschreibung

Objektorientierter Stil

public mysqli_result::fetch_field_direct(int $index): object|false

Prozeduraler Stil

mysqli_fetch_field_direct(mysqli_result $result, int $index): object|false

Gibt ein Objekt zurück, das die Informationen über die Definition einer Spalte aus der angegebenen Ergebnismenge enthält.

Parameter-Liste

result

Nur bei prozeduralem Aufruf: Ein von mysqli_query(), mysqli_store_result(), mysqli_use_result() oder mysqli_stmt_get_result() zurückgegebenes mysqli_result-Objekt.

index

Die Nummer der Spalte. Dieser Wert muss im Bereich von 0 bis Anzahl der Spalten - 1 liegen.

Rückgabewerte

Gibt ein Objekt zurück, das die Informationen über die Definition einer Spalte enthält, oder false, wenn für die angegebene index keine Feldinformationen verfügbar sind.

Eigenschaften des Objekts
Eigenschaft Beschreibung
name Der Name der Spalte
orgname Der ursprüngliche Name der Spalte, falls ein Alias angegeben wurde
table Der Name der Tabelle, zu der diese Spalte gehört (falls nicht berechnet)
orgtable Der ursprüngliche Name der Tabelle, falls ein Alias angegeben wurde
def Nicht verwendet; immer eine leere Zeichenkette
db Der Name der Datenbank
catalog Nicht verwendet; immer "def"
max_length Die maximale Breite der Spalte für die Ergebnismenge. Seit PHP 8.1 ist dieser Wert immer 0.
length Die Breite der Spalte in Bytes. Bei Zeichenkettenspalten hängt der Längenwert vom Zeichensatz der Verbindung ab. Ist der Zeichensatz z. B. ein Ein-Byte-Zeichensatz wie latin1, beträgt der Längenwert für eine SELECT 'abc'-Abfrage 3. Ist der Zeichensatz ein Multibyte-Zeichensatz wie utf8mb4, bei dem die Zeichen bis zu 4 Bytes umfassen, beträgt der Längenwert 12.
charsetnr Die Nummer des Zeichensatzes der Spalte
flags Ein Integer, der die Bit-Flags der Spalte darstellt
type Der für diese Spalte verwendete Datentyp
decimals Bei numerischen Spalten die Anzahl der Dezimalstellen, bei Zeitspalten die Genauigkeit der Sekundenbruchteile.

Beispiele

Beispiel #1 Objektorientierter Stil

<?php
$mysqli
= new mysqli("localhost", "my_user", "my_password", "world");

/* Verbindung überprüfen */
if (mysqli_connect_errno()) {
printf("Verbindung fehlgeschlagen: %s\n", mysqli_connect_error());
exit();
}

$query = "SELECT Name, SurfaceArea from Country ORDER BY Name LIMIT 5";

if (
$result = $mysqli->query($query)) {

/* Informationen über die Spalte 'SurfaceArea' abrufen */
$finfo = $result->fetch_field_direct(1);

printf("Name: %s\n", $finfo->name);
printf("Tabelle: %s\n", $finfo->table);
printf("max. Länge: %d\n", $finfo->max_length);
printf("Flags: %d\n", $finfo->flags);
printf("Typ: %d\n", $finfo->type);

$result->close();
}

/* Verbindung schließen */
$mysqli->close();
?>

Beispiel #2 Prozeduraler Stil

<?php
$link
= mysqli_connect("localhost", "my_user", "my_password", "world");

/* Verbindung überprüfen */
if (mysqli_connect_errno()) {
printf("Verbindung fehlgeschlagen: %s\n", mysqli_connect_error());
exit();
}

$query = "SELECT Name, SurfaceArea from Country ORDER BY Name LIMIT 5";

if (
$result = mysqli_query($link, $query)) {

/* Informationen über die Spalte 'SurfaceArea' abrufen */
$finfo = mysqli_fetch_field_direct($result, 1);

printf("Name: %s\n", $finfo->name);
printf("Tabelle: %s\n", $finfo->table);
printf("max. Länge: %d\n", $finfo->max_length);
printf("Flags: %d\n", $finfo->flags);
printf("Typ: %d\n", $finfo->type);

mysqli_free_result($result);
}

/* Verbindung schließen */
mysqli_close($link);
?>

Die obigen Bespiele erzeugen folgende Ausgabe:

Name:       SurfaceArea
Tabelle:    Country
max. Länge: 10
Flags:      32769
Typ:        4

Siehe auch

add a note

User Contributed Notes 12 notes

up
15
daniel at summit cove dot com
16 years ago
Here's a bigger list of data types.  I got this by creating every type I could and calling fetch_fields():<?php$mysql_data_type_hash = array(    1=>'tinyint',    2=>'smallint',    3=>'int',    4=>'float',    5=>'double',    7=>'timestamp',    8=>'bigint',    9=>'mediumint',    10=>'date',    11=>'time',    12=>'datetime',    13=>'year',    16=>'bit',    //252 is currently mapped to all text and blob types (MySQL 5.0.51a)    253=>'varchar',    254=>'char',    246=>'decimal');?>
up
3
cjs at ashdowntech dot com
16 years ago
According todev.mysql.com/sources/doxygen/mysql-5.1/mysql__com_8h-source.htmlthe flag bits are:  NOT_NULL_FLAG          1         /* Field can't be NULL */ PRI_KEY_FLAG           2         /* Field is part of a primary key */ UNIQUE_KEY_FLAG        4         /* Field is part of a unique key */ MULTIPLE_KEY_FLAG      8         /* Field is part of a key */ BLOB_FLAG             16         /* Field is a blob */ UNSIGNED_FLAG         32         /* Field is unsigned */ ZEROFILL_FLAG         64         /* Field is zerofill */ BINARY_FLAG          128         /* Field is binary   */ ENUM_FLAG            256         /* field is an enum */ AUTO_INCREMENT_FLAG  512         /* field is a autoincrement field */ TIMESTAMP_FLAG      1024         /* Field is a timestamp */
up
4
ben dot NOSPAM at NOSPAM dot seraphire dot com
12 years ago
This may be obvious, but the constants for the field types are already defined in PHP, and can be found in the documentation at: http://php.net/manual/en/mysqli.constants.php
up
4
cjs at ashdowntech dot com
16 years ago
According tohttp://www.redferni.uklinux.net/mysql/MySQL-Protocol.htmlData type values are:DECIMAL           0       ENUM           247TINY              1       SET            248SHORT             2       TINY_BLOB      249LONG              3       MEDIUM_BLOB    250FLOAT             4       LONG_BLOB      251DOUBLE            5       BLOB           252NULL              6       VAR_STRING     253TIMESTAMP         7       STRING         254LONGLONG          8       GEOMETRY       255INT24             9DATE             10TIME             11DATETIME         12YEAR             13NEWDATE          14Note that this is not tested and does not containall the values noted by deluxmozart
up
2
andre at koethur dot de
11 years ago
Here are two methods for converting the 'type' and 'flags' attributes to text for debugging purposes. They both use the predefined MYSQLI_ constants to generate the text.<?phppublic static function h_type2txt($type_id){    static $types;    if (!isset($types))    {        $types = array();        $constants = get_defined_constants(true);        foreach ($constants['mysqli'] as $c => $n) if (preg_match('/^MYSQLI_TYPE_(.*)/', $c, $m)) $types[$n] = $m[1];    }    return array_key_exists($type_id, $types)? $types[$type_id] : NULL;}public static function h_flags2txt($flags_num){    static $flags;    if (!isset($flags))    {        $flags = array();        $constants = get_defined_constants(true);        foreach ($constants['mysqli'] as $c => $n) if (preg_match('/MYSQLI_(.*)_FLAG$/', $c, $m)) if (!array_key_exists($n, $flags)) $flags[$n] = $m[1];    }    $result = array();    foreach ($flags as $n => $t) if ($flags_num & $n) $result[] = $t;    return implode(' ', $result);}?>
up
0
anatoliy at ukhvanovy dot name
10 years ago
You can find all available data types here:https://php.net/manual/ru/mysqli.constants.php(search "MYSQLI_TYPE_" in your browser)
up
0
gmx dot net at Hoffmann dot P
11 years ago
Warning!This function is not only more memory consuming than expected but the consumption also depends on the size of the result set. So if you realy only want to get your field_names you might want to append " LIMIT 1" or use mysqli->unbuffered_query() to save yourself from a memory bloat.
up
-1
Anonymous
5 years ago
JSON type is 245 if anyone is wondering.
up
0
shoresofnowhere at gmail dot com
15 years ago
Beware of the fact that the ->def property NEVER gets filled with the correct default field value, so it's totally USELESS.This happens NOT for a bug in php (so don't go filling in a bug report), but happens BY DESIGN, since the MySQL C API call doesn't fill in this value, unless you call the mysql_list_fields() function, which Php doesn't.See here for reference.http://dev.mysql.com/doc/refman/5.0/en/c-api-datatypes.htmlAlso, be aware that if you're using a query which contains subqueries, the primary key/autoincrement flags do NOT get passed along, even if the field you're looking at is the primary autoincrement key of the master table:SELECT * from (SELECT id from areas) AS subareasand you'll find primary key and autoinc flags off on id field, even if id was the primary autoinc key of areas table.This also is by design, i think, since it's supposed that if we're using a subquery then the primary key/autoinc stuff might have no sense at all, since in the result set we can compose fileds from many different tables.Hoping this is useful, bye!
up
-1
bl at example dot com
15 years ago
note that"SELECT <timestamp-field>, ..."will return the field with type 7 (timestamp) but with content like "2010-07-14 14:35:08". the point being it is a string."SELECT <timestamp-field> + 0, ..."returns a type 5 (double) but while a number, is not seconds since epoch, but a number in MySQL's "YYYYMMDDHHMMSS" format, in this example:20100714143508(PHP 5.2.12)
up
-1
deluxmozart at yahoo dot de
17 years ago
Here are some Numbers of Datatypes. I searched for it but i didn't find a list, where the datatypes of the numbers are listed.so first I can give this:    3    -    Int    10    -    Date    246    -    Decimal    252    -     text    253    -    VarChar    254    -    Boolean
up
-2
gcdreak at example dot com
16 years ago
I wrote a simple class to get info about fields.Try it!<?php            class MysqlFieldsInfo implements Iterator            {                                private $result;                private $position;                private $row;                                                function __construct($result){                    $this->result = $result;                    $this->position = 0;                    $this->rewind();    // W $results wewnętrzny wskaźnik może być przesunięty więc powracamy do początku                }                                public function current(){                    return $this->row;                }                                public function next(){                    $this->position++;                    $this->row = $this->result->fetch_field();                    }                                public function valid(){                    return (boolean) $this->row;                }                                public function key(){                    return $this->position;                }                                public function rewind(){                    $this->position = 0;                    $this->result->field_seek(0);                    $this->next();                }                                //    This function show data in table                public function export(){                                        echo '<table id="db_table_info">';                    echo '<tr>                                                <th>Name</th>                                                <th>Orgname</th>                                                <th>Table</th>                                                <th>Orgtable</th>                                                <th>Def</th>                                                 <th>Max_length</th>                                                 <th>Length</th>                                                 <th>Charsetnr</th>                                                 <th>Flags</th>                                                 <th>Type</th>                                                  <th>Decimals</th>                                          </tr>';                    while($this->valid()){                        echo '<tr>';                        printf("\n\t<td>%s</td>\n", $this->current()->name);                        printf("\t<td>%s</td>\n", $this->current()->orgname);                        printf("\t<td>%s</td>\n", $this->current()->orgtable);                        printf("\t<td>%s</td>\n", $this->current()->def);                        printf("\t<td>%s</td>\n", $this->current()->max_length);                        printf("\t<td>%s</td>\n", $this->current()->length);                        printf("\t<td>%s</td>\n", $this->current()->charsetnr);                        printf("\t<td>%s</td>\n", $this->current()->flags);                        printf("\t<td>%s</td>\n", $this->current()->type);                        printf("\t<td>%s</td>\n", $this->current()->decimals);                        echo '</tr>';                                            $this->next();                    }                                        echo '</table>';                }            }?>
To Top