Die Funktionen für vorbereitete Anweisungen werden hier zusammengefasst und im Weiteren genauer beschrieben. Siehe Abschnitt 24.2.7, „C-API Prepared Statements: Funktionsbeschreibungen“.
| Funktion | Beschreibung | 
| mysql_stmt_affected_rows() | Liefert die Anzahl der Änderungen, Löschungen und Einfügungen in
                Zeilen durch eine vorbereitete UPDATE-,DELETE-
                oderINSERT-Anweisung. | 
| mysql_stmt_attr_get() | Holt den Wert eines Attributs für eine vorbereitete Anweisung. | 
| mysql_stmt_attr_set() | Setzt ein Attribut für eine vorbereitete Anweisung. | 
| mysql_stmt_bind_param() | Verbindet Anwendungsdatenpuffer mit den Parametermarkern einer vorbereiteten SQL-Anweisung. | 
| mysql_stmt_bind_result() | Verbindet Anwendungsdatenpuffer mit den Spalten der Ergebnismenge. | 
| mysql_stmt_close() | Gibt den von einer vorbereiteten Anweisung benutzten Speicher frei. | 
| mysql_stmt_data_seek() | Sucht nach einer beliebigen Zeilennummer in der Ergebnismenge einer Anweisung. | 
| mysql_stmt_errno() | Liefert die Fehlernummer für die letzte Ausführung einer Anweisung. | 
| mysql_stmt_error() | Liefert die Fehlermeldung für die letzte Ausführung einer Anweisung. | 
| mysql_stmt_execute() | Führt die vorbereitete Anweisung aus. | 
| mysql_stmt_fetch() | Holt die nächste Datenzeile aus der Ergebnismenge und liefert Daten für alle gebundenen Spalten. | 
| mysql_stmt_fetch_column() | Holt Daten einer Spalte aus der aktuellen Zeile der Ergebnismenge. | 
| mysql_stmt_field_count() | Liefert die Anzahl der Ergebnisspalten für die letzte Anweisung. | 
| mysql_stmt_free_result() | Gibt die für den Anweisungs-Handle zugewiesenen Ressourcen frei. | 
| mysql_stmt_init() | Weist der MYSQL_STMT-Struktur Speicher zu und
                initialisiert sie. | 
| mysql_stmt_insert_id() | Liefert die für eine AUTO_INCREMENT-Spalte von einer
                vorbereiteten Anweisung generierte ID. | 
| mysql_stmt_num_rows() | Liefert die Gesamtzahl der Zeilen in der gepufferten Ergebnismenge der Anweisung. | 
| mysql_stmt_param_count() | Liefert die Anzahl der Parameter in einer vorbereiteten SQL-Anweisung. | 
| mysql_stmt_param_metadata() | Liefert Parametermetadaten in Form einer Ergebnismenge. | 
| mysql_stmt_prepare() | Bereitet einen SQL-String zur Ausführung vor. | 
| mysql_stmt_reset() | Setzt die Anweisungspuffer im Server zurück. | 
| mysql_stmt_result_metadata() | Liefert Metadaten zu einer vorbereiteten Anweisung in Form einer Ergebnismenge. | 
| mysql_stmt_row_seek() | Sucht einen Zeilen-Offset in der Ergebnismenge einer Anweisung und
                verwendet dazu den Rückgabewert von mysql_stmt_row_tell(). | 
| mysql_stmt_row_tell() | Liefert die Zeilen-Cursor-Position der Anweisung. | 
| mysql_stmt_send_long_data() | Sendet lange Daten stückweise an den Server. | 
| mysql_stmt_sqlstate() | Liefert den SQLSTATE-Fehlercode für die letzte Anweisungsausführung. | 
| mysql_stmt_store_result() | Lädt die gesamte Ergebnismenge auf den Client herunter. | 
        Rufen Sie zuerst mysql_stmt_init() auf, um
        einen Anweisungs-Handle zu erzeugen, dann
        mysql_stmt_prepare, um die Anweisung
        vorzubereiten, dann mysql_stmt_bind_param(),
        um die Parameterdaten zu liefern, und zum Schluss
        mysql_stmt_execute(), um die Anweisung
        auszuführen. Sie können den
        mysql_stmt_execute()-Aufruf wiederholen,
        indem Sie die Parameterwerte in den jeweiligen von
        mysql_stmt_bind_param() zur Verfügung
        gestellten Puffern ändern.
      
        Ist die Anweisung ein SELECT oder eine andere
        Anweisung, die eine Ergebnismenge erstellt, liefert
        mysql_stmt_prepare() zu dieser Ergebnismenge
        auch Metadaten in Form einer von
        mysql_stmt_result_metadata() zurückgegebenen
        MYSQL_RES-Ergebnismenge.
      
        Sie können die Ergebnispuffer mit
        mysql_stmt_bind_result() zur Verfügung
        stellen, sodass mysql_stmt_fetch()
        automatisch Daten an diese Puffer liefert. Dabei handelt es sich
        um einen zeilenweisen Datenabruf.
      
        Sie können auch die Text- oder Binärdaten mit
        mysql_stmt_send_long_data() stückweise an
        den Server senden. Siehe
        Abschnitt 24.2.7.25, „mysql_stmt_send_long_data()“.
      
        Wenn die Anweisungsausführung abgeschlossen ist, muss der
        Anweisungs-Handle mit mysql_stmt_close()
        geschlossen werden, damit alle seine Ressourcen freigegeben
        werden können.
      
        Wenn Sie mit mysql_stmt_result_metadata()
        Metadaten zur Ergebnismenge einer
        SELECT-Anweisung beschafft haben, müssen Sie
        mit mysql_free_result() auch diese Metadaten
        freigeben.
      
Ausführungsschritte
Um eine Anweisung zur Nutzung in einer Anwendung vorzubereiten und auszuführen, müssen Sie Folgendes tun:
            Mit msyql_stmt_init() erzeugen Sie einen
            Handle für eine vorbereitete Anweisung. Um die Anweisung
            auf dem Server vorzubereiten, müssen Sie die Funktion
            mysql_stmt_prepare() aufrufen und ihr
            einen String mit der SQL-Anweisung übergeben.
          
            Wenn die Anweisung eine Ergebnismenge erstellt, müssen Sie
            die Metadaten dieser Ergebnismenge mit
            mysql_stmt_result_metadata() abholen. Die
            Metadaten liegen selbst ebenfalls in Form einer
            Ergebnismenge vor, allerdings einer anderen als der, die die
            Rückgabezeilen der Anfrage enthält. Die
            Metadatenergebnismenge gibt an, wie viele Spalten das
            Ergebnis enthält, und gibt Informationen über jede dieser
            Spalten.
          
            Die Parameterwerte setzen Sie mit
            mysql_stmt_bind_param(). Alle Parameter
            müssen gesetzt werden. Andernfalls gibt die
            Anweisungsausführung einen Fehler zurück oder liefert
            unerwartete Resultate.
          
            Mit einem Aufruf von mysql_stmt_execute()
            führen Sie die Anweisung aus.
          
            Wenn die Anweisung eine Ergebnismenge erstellt, binden Sie
            die Datenpuffer zum Abruf der Zeilenwerte mit
            mysql_stmt_bind_result().
          
            Laden Sie die Daten zeilenweise durch wiederholten Aufruf
            von mysql_stmt_fetch() in die Puffer
            herunter, bis keine weiteren Zeilen mehr vorliegen.
          
Wiederholen Sie die Schritte 3 bis 6 so oft wie nötig, indem Sie die Parameterwerte ändern und die Anweisung erneut ausführen.
        Bei einem Aufruf von mysql_stmt_prepare() tut
        das MySQL-Client/Server-Protokoll Folgendes:
      
Der Server parst die Anweisung und sendet den Okay-Status an den Client, indem er eine Anweisungs-ID zuweist. Außerdem sendet er, falls die Anweisung eine Ergebnismenge liefert, die Gesamtzahl der Parameter, eine Zeilenzahl und die Metadaten. Die Syntax und Semantik der Anweisung werden auf dem Server während dieses Aufrufs überprüft.
Der Client verwendet diese Anweisungs-ID für weitere Operationen, damit der Server die Anweisung in seinem Anweisungspool wiederfinden kann.
        Bei einem Aufruf von mysql_stmt_execute()
        geht das MySQL-Client/Server-Protokoll folgendermaßen vor:
      
Der Client nutzt den Anweisungs-Handle und sendet die Parameterdaten an den Server.
Der Server findet die Anweisung anhand der vom Client übergebenen ID wieder, ersetzt die Parametermarker mit den frisch gelieferten Daten und führt die Anweisung aus. Wenn die Anweisung eine Ergebnismenge erstellt, sendet der Server die Daten an den Client zurück, ansonsten sendet er einen Okay-Status und die Gesamtzahl der geänderten, gelöschten oder eingefügten Zeilen.
        Bei einem Aufruf von mysql_stmt_fetch() geht
        das MySQL-Client/Server-Protokoll folgendermaßen vor:
      
Der Client liest die Daten zeilenweise aus dem Paket ein und setzt sie in die Datenpuffer der Anwendung, indem er die notwendigen Typkonvertierungen vornimmt. Hat der Anwendungsdatenpuffer denselben Typ wie das vom Server zurückgegebene Feld, ist die Konvertierung einfach.
        Wenn ein Fehler auftritt, können Sie den Anweisungsfehlercode,
        die Fehlermeldung und den SQLSTATE-Wert mit den Funktionen
        mysql_stmt_errno(),
        mysql_stmt_error() und
        mysql_stmt_sqlstate() erhalten.
      
Protokollierung vorbereiteter Anweisungen
        Für vorbereitete Anweisungen, die mit den C-API-Funktionen
        mysql_stmt_prepare() und
        mysql_stmt_execute() ausgeführt werden,
        schreibt der Server Prepare- und
        Execute-Zeilen in das allgemeine Anfragenlog,
        damit Sie hinterher wissen, wann Anweisungen vorbereitet und
        ausgeführt wurden.
      
Angenommen, Sie bereiten eine Anweisung folgendermaßen vor und führen sie aus:
            Sie rufen mysql_stmt_prepare() auf, um
            den Anweisungs-String "SELECT ?"
            vorzubereiten.
          
            Sie rufen mysql_stmt_bind_param() auf, um
            den Wert 3 an den Parameter der
            vorbereiteten Anweisung zu binden.
          
            Sie rufen mysql_stmt_execute() auf, um
            die vorbereitete Anweisung auszuführen.
          
Aufgrund dieser Funktionsaufrufe schreibt der Server folgende Zeilen in das allgemeine Anfragenlog:
Prepare [1] SELECT ? Execute [1] SELECT 3
        Jede Prepare- und
        Execute-Zeile im Log wird mit einem
        [-Anweisungsbezeichner
        markiert, damit Sie nachvollziehen können, welche vorbereitete
        Anweisung gerade protokolliert wird.
        N]N ist ein positiver Integer. Wenn
        mehrere vorbereitete Anweisungen zugleich für den Client aktiv
        sind, kann N größer als 1 sein.
        Jede Execute-Zeile zeigt eine vorbereitete
        Anweisung nach Einsetzung der Datenwerte in die
        ?-Parameter an.
      
        Versionshinweise: Prepare-Zeilen werden vor
        MySQL 4.1.10 ohne
        [ angezeigt.
        N]Execute-Zeilen werden vor MySQL 4.1.10
        überhaupt nicht angezeigt.
      
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.

