Diese Struktur ist ein Handle für eine einzelne
Datenbankverbindung. Sie wird für fast alle
MySQL-Funktionen benutzt. Bitte versuchen Sie nicht, eine
Kopie einer MYSQL
-Struktur anzulegen. Es
ist nicht garantiert, dass eine solche Kopie benutzbar ist.
Diese Struktur stellt das Ergebnis einer Anfrage dar, die
Zeilen liefert (SELECT
,
SHOW
, DESCRIBE
,
EXPLAIN
). Die Rückgabedaten aus der
Anfrage wird im weiteren Verlauf dieses Abschnitts als
Ergebnismenge bezeichnet.
Eine typsichere Darstellung einer Datenzeile. Sie ist
zurzeit als Array gezählter Byte-Strings implementiert.
(Diese dürfen nicht als auf null endende Strings behandelt
werden, wenn die Feldwerte Binärdaten enthalten könnten,
da solche Werte intern Nullbytes enthalten können.) Die
Zeilen werden mit mysql_fetch_row()
abgerufen.
Diese Struktur enthält Informationen über ein Feld, wie
beispielsweise seinen Namen, seinen Typ und seine Größe.
Ihre Bestandteile werden hier genauer erklärt. Die
MYSQL_FIELD
-Strukturen von Feldern
erhalten Sie, indem Sie wiederholt
mysql_fetch_field()
aufrufen. Die Werte
der Felder sind nicht Teil dieser Struktur, sondern in einer
MYSQL_ROW
-Struktur enthalten.
Dies ist eine typsichere Darstellung eines Offsets in einer
MySQL-Feldliste. (Wird von
mysql_field_seek()
benutzt.) Offsets sind
Feldnummern innerhalb einer Zeile. Sie werden beginnend mit
null gezählt.
Dieser Typ wird für die Anzahl der Zeilen und für
mysql_affected_rows()
,
mysql_num_rows()
und
mysql_insert_id()
genutzt. Er hat einen
Wertebereich von 0
bis
1.84e19
.
Auf manchen Systemen können Werte vom Typ
my_ulonglong
nicht ausgegeben werden. In
einem solchen Fall konvertieren Sie diesen in einen
unsigned long
und verwenden das
Ausgabeformat %lu
. Beispiel:
printf ("Number of rows: %lu\n", (unsigned long) mysql_num_rows(result));
Die MYSQL_FIELD
-Struktur hat folgende
Bestandteile:
char * name
Der Name des Felds als auf null endender String. Wenn dem
Feld mit einer AS
-Klausel ein Aliasname
gegeben wurde, ist der Wert von name
der
Alias.
char * org_name
Der Name des Felds als auf null endender String. Aliasnamen werden ignoriert.
char * table
Der Name der Tabelle, die dieses Feld enthält, wenn es
nicht ein berechnetes Feld ist. Für berechnete Felder ist
der table
-Wert ein leerer String. Wenn
der Tabelle mit einer AS
-Klausel ein
Aliasname gegeben wurde, ist der Wert von
name
der Alias.
char * org_table
Der Name der Tabelle als auf null endender String. Aliasnamen werden ignoriert.
char * db
Der Name der Datenbank, aus der das Feld stammt, als auf
null endender String. Ist das Feld ein berechnetes Feld, ist
db
ein leerer String.
char * catalog
Der Katalogname. Dieser Wert ist immer
"def"
.
char * def
Der Standardwert dieses Felds als auf null endender String.
Wird nur gesetzt, wenn Sie
mysql_list_fields()
verwenden.
unsigned long length
Die Feldbreite gemäß Tabellendefinition.
unsigned long max_length
Die maximale Breite des Felds für die Ergebnismenge (die
Länge des längsten Feldwerts der Zeilen, die sich
tatsächlich gerade in der Ergebnismenge befinden). Wenn Sie
mysql_store_result()
oder
mysql_list_fields()
benutzen, enthält
dieser Wert die Höchstlänge für das Feld. Wenn Sie
mysql_use_result()
aufrufen, ist der Wert
dieser Variablen null.
unsigned int name_length
Die Länge von name
.
unsigned int org_name_length
Die Länge von org_name
.
unsigned int table_length
Die Länge von table
.
unsigned int org_table_length
Die Länge von org_table
.
unsigned int db_length
Die Länge von db
.
unsigned int catalog_length
Die Länge von catalog
.
unsigned int def_length
Die Länge von def
.
unsigned int flags
Verschiedene Bit-Flags für das Feld. Im Wert von
flags
können null oder mehr der
folgenden Bits gesetzt sein:
Flag-Wert | Flag-Beschreibung |
NOT_NULL_FLAG |
Feld kann nicht NULL sein |
PRI_KEY_FLAG |
Feld ist Teil eines Primärschlüssels |
UNIQUE_KEY_FLAG |
Feld ist Teil eines eindeutigen Schlüssels |
MULTIPLE_KEY_FLAG |
Feld ist Teil eines nichteindeutigen Schlüssels |
UNSIGNED_FLAG |
Feld hat das Attribut UNSIGNED
|
ZEROFILL_FLAG |
Feld hat das Attribut ZEROFILL
|
BINARY_FLAG |
Feld hat das Attribut BINARY
|
AUTO_INCREMENT_FLAG |
Feld hat das Attribut AUTO_INCREMENT
|
ENUM_FLAG |
Feld ist eine ENUM (veraltet) |
SET_FLAG |
Feld ist ein SET (veraltet) |
BLOB_FLAG |
Feld ist ein BLOB oder TEXT
(veraltet) |
TIMESTAMP_FLAG |
Feld ist ein TIMESTAMP (veraltet) |
Die Flags BLOB_FLAG
,
ENUM_FLAG
, SET_FLAG
,
und TIMESTAMP_FLAG
sind veraltet, da sie
keinen Attribut-, sondern einen Feldtyp angeben. Es ist
besser, den field->type
mit
MYSQL_TYPE_BLOB
,
MYSQL_TYPE_ENUM
,
MYSQL_TYPE_SET
oder
MYSQL_TYPE_TIMESTAMP
zu vergleichen.
Das folgende Beispiel zeigt eine typische Verwendung des
flags
-Werts:
if (field->flags & NOT_NULL_FLAG) printf("Field can't be null\n");
Mit den folgenden Makros können Sie den booleschen Status
des flags
-Werts nachschauen:
Flag-Status | Beschreibung |
IS_NOT_NULL(flags) |
Ist wahr, wenn dieses Feld als NOT NULL definiert ist |
IS_PRI_KEY(flags) |
Ist wahr, wenn dieses Feld ein Primärschlüssel ist |
IS_BLOB(flags) |
Ist wahr, wenn dieses Feld ein BLOB oder
TEXT ist (veraltet; bitte testen
Sie stattdessen field->type ) |
unsigned int decimals
Die Anzahl der Dezimalstellen für numerische Felder.
unsigned int charset_nr
Die Nummer des Zeichensatzes für das Feld.
enum enum_field_types type
Der Typ des Felds. Der type
-Wert kann
eines der MYSQL_TYPE_
-Symbole aus der
folgenden Tabelle sein.
Typwert | Typbeschreibung |
MYSQL_TYPE_TINY |
TINYINT -Feld |
MYSQL_TYPE_SHORT |
SMALLINT -Feld |
MYSQL_TYPE_LONG |
INTEGER -Feld |
MYSQL_TYPE_INT24 |
MEDIUMINT -Feld |
MYSQL_TYPE_LONGLONG |
BIGINT -Feld |
MYSQL_TYPE_DECIMAL |
DECIMAL - oder NUMERIC -Feld |
MYSQL_TYPE_NEWDECIMAL |
DECIMAL - oder NUMERIC -Typ für
Präzisionsberechnungen |
MYSQL_TYPE_FLOAT |
FLOAT -Feld |
MYSQL_TYPE_DOUBLE |
DOUBLE - oder REAL -Feld |
MYSQL_TYPE_BIT |
BIT -Feld |
MYSQL_TYPE_TIMESTAMP |
TIMESTAMP -Feld |
MYSQL_TYPE_DATE |
DATE -Feld |
MYSQL_TYPE_TIME |
TIME -Feld |
MYSQL_TYPE_DATETIME |
DATETIME -Feld |
MYSQL_TYPE_YEAR |
YEAR -Feld |
MYSQL_TYPE_STRING |
CHAR - oder BINARY -Feld |
MYSQL_TYPE_VAR_STRING |
VARCHAR - oder VARBINARY -Feld |
MYSQL_TYPE_BLOB |
BLOB - oder TEXT -Feld (die
Maximallänge wird mit max_length
ermittelt) |
MYSQL_TYPE_SET |
SET -Feld |
MYSQL_TYPE_ENUM |
ENUM -Feld |
MYSQL_TYPE_GEOMETRY |
Feld eines raumbezogenen Typs |
MYSQL_TYPE_NULL |
Feld mit NULL -Typ |
MYSQL_TYPE_CHAR |
Veraltet; verwenden Sie stattdessen MYSQL_TYPE_TINY
|
Mit dem Makro IS_NUM()
können Sie
testen, ob ein Feld einen numerischen Typ hat. Wenn Sie den
type
-Wert an IS_NUM()
übergeben und TRUE zurückgeliefert wird, ist das Feld
numerisch:
if (IS_NUM(field->type)) printf("Field is numeric\n");
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.