Vorbereitete Anweisungen nutzen hauptsächlich die
        Datenstrukturen MYSQL_STMT und
        MYSQL_BIND. Eine dritte Datenstruktur,
        nämlich MYSQL_TIME, wird zur Übertragung
        von Temporaldaten verwendet.
      
            Diese Struktur stellt eine vorbereitete Anweisung dar. Eine
            Anweisung wird mit der Funktion
            mysql_stmt_init() angelegt, die einen
            Anweisungs-Handle liefert (d. h. einen Zeiger auf
            MYSQL_STMT). Der Handle wird für alle
            folgenden mit der Anweisung verbundenen Funktionen benutzt,
            bis Sie ihn mit mysql_stmt_close() wieder
            schließen.
          
            Die MYSQL_STMT-Struktur hat keine
            Bestandteile für Anwendungen. Legen Sie bitte auch keine
            Kopie einer MYSQL_STMT-Struktur an, da
            nicht garantiert werden kann, dass eine solche Kopie
            benutzbar sein wird.
          
Mehrere Anweisungs-Handles können mit einer einzigen Verbindung verknüpft werden. Wie viele Handles möglich sind, hängt von den Systemressourcen ab.
            Diese Struktur wird sowohl für die Eingabe einer Anweisung
            (der Datenwerte, die an den Server gesandt werden) als auch
            für ihre Ausgabe verwendet (die Ergebnisse, die vom Server
            zurückkommen). Für die Eingabe wird sie mit
            mysql_stmt_bind_param() benutzt, um die
            Parameterwerte an die Puffer zu binden, die
            mysql_stmt_execute() verwenden. Für die
            Ausgabe wird sie mit
            mysql_stmt_bind_result() benutzt, um die
            Ergebnismengenpuffer zu binden, die zum Abholen der Zeilen
            mit mysql_stmt_fetch() verwendet werden.
          
            Die MYSQL_BIND-Struktur enthält folgende
            Bestandteile zur Nutzung durch Anwendungsprogramme. Jeder
            Bestandteil wird sowohl für die Ein- als auch für die
            Ausgabe verwendet, allerdings manchmal zu unterschiedlichen
            Zwecken, je nachdem, in welche Richtung die Daten
            übertragen werden.
          
                enum enum_field_types buffer_type
              
                Der Puffertyp. Die zulässigen
                buffer_type-Werte werden weiter unten
                in diesem Abschnitt aufgeführt. Für die Eingabe zeigt
                buffer_type an, welchen Werttyp Sie
                mit einem Anweisungsparameter verbinden. Für die
                Ausgabe zeigt er an, welchen Werttyp Sie in einem
                Ergebnispuffer erwarten.
              
                void *buffer
              
                Für die Eingabe ist dies ein Zeiger auf den Puffer, in
                welchem die Parameterwerte einer Anweisung gespeichert
                werden. Für die Ausgabe ist es ein Zeiger auf den
                Puffer, in welchen die Spaltenwerte einer Ergebnismenge
                zurückgeliefert werden. Für numerische Datentypen
                sollte buffer auf eine Variable des
                korrekten C-Typs verweisen. (Wenn Sie die Variable mit
                einer Spalte verbinden, die das
                UNSIGNED-Attribut hat, sollte sie ein
                unsigned-C-Typ sein. Ob die Variable
                ein Vorzeichen hat oder nicht, geben Sie mithilfe des
                weiter unten beschriebenen Strukturbestandteils
                is_unsigned an.) Für Datums- und
                Uhrzeittypen sollte buffer auf eine
                MYSQL_TIME-Struktur verweisen. Für
                Zeichen- und Binär-String-Typen sollte
                buffer auf einen Zeichenpuffer
                verweisen.
              
                unsigned long buffer_length
              
                Die tatsächliche Größe von *buffer
                in Bytes. Dies zeigt an, wie viele Daten maximal in dem
                Puffer gespeichert werden können. Für Zeichen und
                binäre C-Daten ist der
                buffer_length-Wert die Länge von
                *buffer, wenn er mit
                mysql_stmt_bind_param() gebraucht
                wird, beziehungsweise die Höchstzahl der Datenbytes,
                die in den Puffer zu laden sind, wenn er mit
                mysql_stmt_bind_result() gebraucht
                wird.
              
                unsigned long *length
              
                Ein Zeiger auf eine unsigned
                long-Variable, die angibt, wie viele Bytes
                tatsächlich in *buffer gespeichert
                sind. length wird für Zeichen- oder
                Binärdaten in C verwendet. Zum Binden der
                Eingabeparameterdaten verweist length
                auf eine unsigned long-Variable,
                welche die Länge des in *buffer
                gespeicherten Parameterwerts angibt. Diese wird von
                mysql_stmt_execute() benutzt. Zum
                Binden der Ausgabewerte speichert
                mysql_stmt_fetch() die Länge des
                Rückgabespaltenwerts in der Variablen, auf die
                length verweist.
              
                length wird bei numerischen und
                temporalen Datentypen ignoriert, weil die Länge des
                Datenwerts anhand des Werts von
                buffer_type ermittelt wird.
              
                my_bool *is_null
              
                Dies verweist auf eine
                my_bool-Variable, die TRUE ist, wenn
                ein Wert NULL ist, und FALSE, wenn er
                nicht NULL ist. Für die Eingabe
                setzen Sie *is_null auf TRUE, wenn
                Sie mitteilen möchten, dass Sie einen
                NULL-Wert als Anweisungsparameter
                übergeben. Für die Ausgabe wird dieser Wert nach dem
                Abruf einer Zeile der Ergebnismenge immer dann auf TRUE
                gesetzt, wenn der Spaltenwert, den die Anweisung
                zurückliefert, NULL ist.
              
                is_null ist ein Zeiger auf einen
                booleschen Wert anstatt auf einen booleschen Skalar.
                Daher kann er auf folgende Weise eingesetzt werden:
              
                    Wenn Ihre Datenwerte immer NULL
                    sind, verwenden Sie
                    MYSQL_TYPE_NULL, um die Spalte zu
                    binden.
                  
                    Wenn Ihre Datenwerte immer NOT
                    NULL sind, stellen Sie ein:
                    is_null = (my_bool*) 0.
                  
                    In allen anderen Fällen sollten Sie
                    is_null auf die Adresse einer
                    my_bool-Variablen einstellen und
                    deren Wert zwischen den Ausführungen jeweils so
                    einstellen, dass sie anzeigt, ob Datenwerte
                    NULL oder NOT
                    NULL sind.
                  
                my_bool is_unsigned
              
                Dies wird für Integer-Typen benutzt (die den Typcodes
                MYSQL_TYPE_TINY,
                MYSQL_TYPE_SHORT,
                MYSQL_TYPE_LONG und
                MYSQL_TYPE_LONGLONG entsprechen.)
                is_unsigned sollte für
                vorzeichenlose Typen auf TRUE und für
                vorzeichenbehaftete auf FALSE gesetzt werden.
              
                my_bool error
              
                Für die Ausgabe wird dieser Strukturbestandteil zur
                Meldung von Fehlern wegen abgeschnittener Datenwerte
                eingesetzt. Sie müssen diese Meldungen aktivieren,
                indem Sie mysql_options() mit der
                Option MYSQL_REPORT_DATA_TRUNCATION
                aufrufen. Wenn dies aktiviert ist, liefert
                mysql_stmt_fetch() die
                MYSQL_DATA_TRUNCATED-Meldungen und
                error ist in den
                MYSQL_BIND-Strukturen für Parameter,
                deren Datenwerte abgeschnitten wurden, TRUE. Beim
                Abschneiden geht ein Vorzeichen oder eine signifikante
                Ziffer verloren oder ein String hat nicht in eine Spalte
                gepasst.
              
            Um eine MYSQL_BIND-Struktur zu verwenden,
            müssen Sie zur Initialisierung ihren Inhalt auf null setzen
            und dann die soeben beschriebenen Bestandteile in geeigneter
            Weise einstellen. Wenn Sie beispielsweise ein Array von drei
            MYSQL_BIND-Strukturen deklarieren und
            initialisieren möchten, verfahren Sie folgendermaßen:
          
MYSQL_BIND bind[3]; memset(bind, 0, sizeof(bind));
            Diese Struktur sendet und empfängt Daten vom Typ
            DATE, TIME,
            DATETIME und TIMESTAMP
            direkt an den bzw. von dem Server. Dies tut sie, indem der
            buffer_type-Teil einer
            MYSQL_BIND-Struktur auf einen der
            temporalen Datentypen und der buffer auf
            eine MYSQL_TIME-Struktur eingestellt
            wird.
          
            Die MYSQL_TIME-Struktur enthält folgende
            Bestandteile:
          
                unsigned int year
              
Das Jahr.
                unsigned int month
              
Der Monat des Jahres.
                unsigned int day
              
Der Tag des Monats.
                unsigned int hour
              
Die Stunde des Tages.
                unsigned int minute
              
Die Minute der Stunde.
                unsigned int second
              
Die Sekunde der Minute.
                my_bool neg
              
Ein boolesches Flag, das angibt, ob der Zeitwert negativ ist.
                unsigned long second_part
              
Ein Sekundenbruchteil. Dieser Teil wird zurzeit nicht benutzt.
            Es werden nur diejenigen Teile einer
            MYSQL_TIME-Struktur benutzt, die auf
            einen gegebenen Temporalwerttyp anwendbar sind: Die Elemente
            year, month und
            day werden für DATE-,
            DATETIME- und
            TIMESTAMP-Werte gebraucht und die
            Elemente hour, minute
            und second für TIME-,
            DATETIME- und
            TIMESTAMP-Werte. Siehe
            Abschnitt 24.2.10, „C-API: Behandlung von Datums- und Zeitwerten“.
          
        Die folgende Tabelle zeigt die zulässigen Werte an, die im
        buffer_type-Teil von
        MYSQL_BIND-Strukturen angegeben werden
        können. Sie dokumentiert auch, welche SQL-Typen am ehesten den
        buffer_type-Werten entsprechen, sowie den
        entsprechenden C-Typ für numerische und temporale Typen.
      
| buffer_typeWert | SQL-Typ | C-Typ | 
| MYSQL_TYPE_BIT | BIT |  | 
| MYSQL_TYPE_TINY | TINYINT | char | 
| MYSQL_TYPE_SHORT | SMALLINT | short int | 
| MYSQL_TYPE_LONG | INT | int | 
| MYSQL_TYPE_LONGLONG | BIGINT | long long int | 
| MYSQL_TYPE_FLOAT | FLOAT | float | 
| MYSQL_TYPE_DOUBLE | DOUBLE | double | 
| MYSQL_TYPE_TIME | TIME | MYSQL_TIME | 
| MYSQL_TYPE_DATE | DATE | MYSQL_TIME | 
| MYSQL_TYPE_DATETIME | DATETIME | MYSQL_TIME | 
| MYSQL_TYPE_TIMESTAMP | TIMESTAMP | MYSQL_TIME | 
| MYSQL_TYPE_STRING | CHAR | |
| MYSQL_TYPE_VAR_STRING | VARCHAR | |
| MYSQL_TYPE_TINY_BLOB | TINYBLOB/TINYTEXT | |
| MYSQL_TYPE_BLOB | BLOB/TEXT | |
| MYSQL_TYPE_MEDIUM_BLOB | MEDIUMBLOB/MEDIUMTEXT | |
| MYSQL_TYPE_LONG_BLOB | LONGBLOB/LONGTEXT | 
Eine implizite Typumwandlung ist in beiden Richtungen möglich.
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.

