Die Funktionen der C-API werden im Folgenden zusammengefasst und in einem späteren Abschnitt genauer beschrieben. Siehe hierzu Abschnitt 24.2.3, „C-API: Funktionsbeschreibungen“.
Funktion | Beschreibung |
mysql_affected_rows() | Liefert die Anzahl der mit dem letzten UPDATE ,
DELETE oder INSERT
geänderten/gelöschten/eingefügten Zeilen |
mysql_autocommit() | Schaltet Autocommit ein oder aus |
mysql_change_user() | Ändert den Benutzer und die Datenbank für eine offene Verbindung |
mysql_charset_name() | Liefert den Namen des Standardzeichensatzes für die Verbindung |
mysql_close() | Schließt eine Serververbindung |
mysql_commit() | Committet die Transaktion. |
mysql_connect() | Verbindet sich mit einem MySQL Server. Diese Funktion ist veraltet;
verwenden Sie stattdessen
mysql_real_connect() . |
mysql_create_db() | Legt eine Datenbank an. Diese Funktion ist veraltet; verwenden Sie
stattdessen die SQL-Anweisung CREATE
DATABASE . |
mysql_data_seek() | Sucht in der Ergebnismenge einer Anfrage eine beliebige Datenzeile |
mysql_debug() | Führt ein DBUG_PUSH mit dem angegebenen String durch |
mysql_drop_db() | Löscht eine Datenbank. Diese Funktion ist veraltet; verwenden Sie
stattdessen die SQL-Anweisung DROP
DATABASE . |
mysql_dump_debug_info() | Lässt den Server Debugginginformationen in das Log schreiben |
mysql_eof() | Stellt fest, ob die letzte Zeile einer Ergebnismenge gelesen wurde.
Diese Funktion ist veraltet; verwenden Sie stattdessen
mysql_errno() oder
mysql_error() . |
mysql_errno() | Liefert die Fehlernummer für die zuletzt aufgerufene MySQL-Funktion |
mysql_error() | Liefert die Fehlermeldung für die zuletzt aufgerufene MySQL-Funktion |
mysql_escape_string() | Versieht Sonderzeichen in einem String, der in einer SQL-Anweisung benutzt werden soll, mit Escape-Symbolen |
mysql_fetch_field() | Liefert den Typ des nächsten Tabellenfelds. |
mysql_fetch_field_direct() | Liefert den Typ des Tabellenfelds mit der gegebenen Feldnummer |
mysql_fetch_fields() | Liefert ein Array aller Feldstrukturen |
mysql_fetch_lengths() | Liefert die Längen aller Spalten der aktuellen Zeile |
mysql_fetch_row() | Holt die nächste Zeile der Ergebnismenge ab |
mysql_field_seek() | Setzt den Spalten-Cursor auf eine gegebene Spalte |
mysql_field_count() | Liefert die Anzahl der Ergebnisspalten der letzten Anweisung |
mysql_field_tell() | Liefert die Position des Feld-Cursors, der für das letzte
mysql_fetch_field() verwendet wurde |
mysql_free_result() | Gibt den von einer Ergebnismenge belegten Speicher frei |
mysql_get_client_info() | Liefert Versionsinformationen für den Client als String |
mysql_get_client_version() | Liefert Versionsinformationen für den Client als Integer |
mysql_get_host_info() | Liefert einen String, der die Verbindung beschreibt |
mysql_get_server_version() | Liefert die Versionsnummer des Servers als Integer. |
mysql_get_proto_info() | Liefert die Protokollversion der Verbindung |
mysql_get_server_info() | Liefert die Versionsnummer des Servers |
mysql_info() | Liefert Informationen über die zuletzt ausgeführte Anfrage |
mysql_init() | Holt oder initialisiert eine MYSQL -Struktur |
mysql_insert_id() | Liefert die für eine AUTO_INCREMENT -Spalte von der
vorhergehenden Anfrage generierte ID |
mysql_kill() | Hält einen gegebenen Thread an |
mysql_library_end() | Finalisiert die MySQL-C-API-Bibliothek |
mysql_library_init() | Initialisiert die MySQL-C-API-Bibliothek |
mysql_list_dbs() | Liefert Datenbanknamen, die mit einem einfachen regulären Ausdruck übereinstimmen |
mysql_list_fields() | Liefert Feldnamen, die mit einem einfachen regulären Ausdruck übereinstimmen |
mysql_list_processes() | Liefert eine Liste der aktuellen Server-Threads |
mysql_list_tables() | Liefert Tabellennamen, die mit einem einfachen regulären Ausdruck übereinstimmen |
mysql_more_results() | Prüft, ob noch weitere Ergebnisse vorhanden sind |
mysql_next_result() | Liefert/initiiert das nächste Ergebnis für Mehrfachanweisungen |
mysql_num_fields() | Liefert die Anzahl der Spalten einer Ergebnismenge |
mysql_num_rows() | Liefert die Anzahl der Zeilen einer Ergebnismenge |
mysql_options() | Stellt Verbindungsoptionen für mysql_connect() ein |
mysql_ping() | Prüft, ob die Serververbindung funktioniert, und baut bei Bedarf eine neue Verbindung auf |
mysql_query() | Führt eine SQL-Anfrage aus, die als auf null endender String angegeben ist. |
mysql_real_connect() | Verbindet sich mit einem MySQL Server |
mysql_real_escape_string() | Versieht Sonderzeichen in einem String, der in einer SQL-Anweisung benutzt werden soll, mit Escape-Symbolen, wobei der aktuelle Zeichensatz der Verbindung berücksichtigt wird |
mysql_real_query() | Führt eine als abgezählter String angegebene SQL-Anfrage aus |
mysql_refresh() | Schreibt Tabellen und Caches auf die Platte zurück oder setzt sie zurück |
mysql_reload() | Lässt den Server die Berechtigungstabellen neu laden |
mysql_rollback() | Rollt die Transaktion zurück |
mysql_row_seek() | Findet einen Zeilen-Offset in einer Ergebnismenge anhand des
Rückgabewerts von mysql_row_tell()
|
mysql_row_tell() | Liefert die Position des Zeilen-Cursors |
mysql_select_db() | Wählt eine Datenbank aus |
mysql_server_end() | Finalisiert die Embedded Server-Bibliothek |
mysql_server_init() | Initialisiert die Embedded Server-Bibliothek |
mysql_set_server_option() | Setzt eine Option für die Verbindung (wie
multi-statements ) |
mysql_sqlstate() | Liefert den SQLSTATE-Fehlercode für den letzten Fehler |
mysql_shutdown() | Fährt den Datenbankserver herunter |
mysql_stat() | Liefert den Serverstatus als String |
mysql_store_result() | Holt eine vollständige Ergebnismenge auf den Client |
mysql_thread_id() | Liefert die aktuelle Thread-ID |
mysql_thread_safe() | Liefert 1, wenn die Clients als Thread-sicher kompiliert wurden |
mysql_use_result() | Initiiert einen zeilenweisen Abruf der Ergebnismenge |
mysql_warning_count() | Liefert die Anzahl der Warnungen für die vorangehende SQL-Anweisung |
Anwendungsprogramme sollten sich an folgende Vorgehensweise halten, wenn sie mit MySQL zusammenarbeiten wollen:
Sie initialisieren die MySQL-Bibliothek durch Aufruf von
mysql_library_init()
. Die Bibliothek kann
entweder die
mysqlclient
-C-Clientbibliothek oder die
mysqld
-Embedded Server-Bibliothek sein,
je nachdem, ob die Anwendung mit dem Flag
-libmysqlclient
oder
-libmysqld
verlinkt worden ist.
Sie initialisieren einen Verbindungs-Handler durch Aufruf
von mysql_init()
und verbinden sich durch
mysql_real_connect()
mit dem Server.
Sie geben ihre SQL-Anweisungen und verarbeiten die Ergebnisse. (Im Folgenden wird genauer beschrieben, wie dies getan wird.)
Sie schließen die Verbindung zum MySQL Server durch Aufruf
von mysql_close()
.
Sie beenden die Nutzung der MySQL-Bibliothek durch Aufruf
von mysql_library_end()
.
mysql_library_init()
und
mysql_library_end()
werden aufgerufen, um die
MySQL-Bibliothek richtig zu initialisieren und zu finalisieren.
Für Anwendungen, die mit der Clientbibliothek verlinkt sind,
bietet diese Funktionen eine verbesserte Speicherverwaltung.
Wenn Sie mysql_library_end()
nicht aufrufen,
bleibt weiterhin ein Arbeitsspeicherblock reserviert. (Zwar
belegt die Anwendung deswegen nicht mehr Speicher, aber
bestimmte Detektoren für Speicherlecks würden sich
beschweren.) Für Anwendungen, die mit dem Embedded Server
verlinkt sind, starten und stoppen diese Aufrufe den Server.
mysql_library_init()
und
mysql_library_end()
sind in Wirklichkeit
#define
-Symbole und somit äquivalent zu
mysql_server_init()
und
mysql_server_end()
, aber die anderen Namen
betonen stärker, dass diese Funktionen immer vor und nach der
Benutzung einer MySQL-Bibliothek aufgerufen werden müssen, egal
ob die Anwendung die mysqlclient
- oder die
mysqld
-Bibliothek verwendet. In älteren
MySQL-Versionen können Sie stattdessen
mysql_server_init()
und
mysql_server_end()
aufrufen.
Sie können den Aufruf von
mysql_library_init()
auch weglassen, da
mysql_init()
diese Funktion automatisch
aufruft, wenn es notwendig ist.
Um sich mit dem Server zu verbinden, initialisieren Sie mit
mysql_init()
einen Verbindungs-Handler und
rufen mysql_real_connect()
mit diesem Handler
(sowie anderen Informationen, wie zum Beispiel Hostname,
Benutzername und Passwort) auf. Beim Verbinden setzt
mysql_real_connect()
das
reconnect
-Flag (ein Teil der
MYSQL
-Struktur) auf den Wert
1
, wenn die API-Version älter als 5.0.3 ist,
oder auf 0
, wenn sie neuer ist. Wenn dieses
Flag den Wert 1
hat, bedeutet dies: Falls
eine Anweisung wegen Verbindungsabbruchs nicht ausgeführt
werden kann, versucht das System, sich erneut mit dem Server zu
verbinden, ehe es aufgibt. Seit MySQL 5.0.13 können Sie das
Verhalten in Bezug auf Neuverbindungen mit der Option
MYSQL_OPT_RECONNECT
von
mysql_options()
steuern. Wenn Sie die
Verbindung nicht mehr benötigen, beenden Sie sie mit
mysql_close()
.
Während eine Verbindung aktiv ist, kann der Client
SQL-Anweisungen mit mysql_query()
oder
mysql_real_query()
an den Server senden. Der
Unterschied ist der, dass mysql_query()
die
Anfrage als auf null endenden String erwartet, während
mysql_real_query()
mit einem abgezählten
String rechnet. Wenn der String Binärdaten enthält (die auch
Nullbytes umfassen können), müssen Sie
mysql_real_query()
verwenden.
Für alle Nicht-SELECT
-Anfragen
(beispielsweise INSERT
,
UPDATE
, DELETE
) können
Sie die Anzahl der betroffenen Zeilen durch
mysql_affected_rows()
ermitteln.
Bei SELECT
-Anfragen rufen Sie die betroffenen
Zeilen als Ergebnismenge ab. (Beachten Sie, dass manche
Anweisungen insofern SELECT
-ähnlich sind,
als sie Zeilen zurückliefern. Dazu gehören
SHOW
, DESCRIBE
und
EXPLAIN
. Diese sollten ebenso wie
SELECT
-Anweisungen behandelt werden.)
Ein Client hat zwei Möglichkeiten, mit Ergebnismengen
umzugehen: Erstens kann er die gesamte Ergebnismenge in einem
Schwung abholen, indem er
mysql_store_result()
aufruft. Diese Funktion
holt sich vom Server alle von der Anfrage gelieferten Zeilen und
speichert sie auf dem Client. Die zweite Möglichkeit besteht
darin, die Ergebnismenge mit
mysql_use_result()
zeilenweise abzurufen.
Diese Funktion initialisiert den Datenabruf, holt aber die
Zeilen vom Server nicht wirklich ab.
In beiden Fällen greifen Sie mit
mysql_fetch_row()
auf die Zeilen zu. Mit
mysql_store_result()
greift sich
mysql_fetch_row()
Zeilen, die vom Server
bereits abgeholt worden sind. Mit
mysql_use_result()
ruft
mysql_fetch_row()
die jeweilige Zeile selbst
vom Server. Informationen über den Umfang der Daten in den
Zeilen liefert Ihnen mysql_fetch_lengths()
.
Wenn Sie mit einer Ergebnismenge fertig sind, geben Sie mit
mysql_free_result()
ihren Arbeitsspeicher
wieder frei.
Die beiden Abrufmechanismen ergänzen einander. Clientprogramme
sollten den Ansatz verfolgen, der für ihre Zwecke am besten
geeignet ist. In der Praxis wird
mysql_store_result()
von den Clients
häufiger verwendet.
mysql_store_result()
hat einen Vorteil. Da
bereits alle Zeilen auf den Client geladen wurden, können Sie
nicht nur der Reihe nach auf sie zugreifen, sondern sich mit
mysql_data_seek()
oder
mysql_row_seek()
in der Ergebnismenge vor-
und zurückbewegen und auf eine andere Zeilenposition in der
Ergebnismenge gehen. Sie können überdies mit
mysql_num_rows()
herausfinden, wie viele
Zeilen die Ergebnismenge hat. Allerdings kann
mysql_store_result()
bei großen
Ergebnismengen auch viel Speicher belegen, wodurch die Gefahr
von out-of-memory
-Bedingungen wächst.
mysql_use_result()
hat den Vorteil, dass der
Client nicht so viel Arbeitsspeicher für die Ergebnismenge
benötigt, da er immer nur eine einzige Zeile speichern muss
(und durch den geringeren Aufwand bei der Zuweisung kann
mysql_use_result()
überdies schneller sein).
Die Nachteile: Sie müssen jede Zeile schnell verarbeiten, um
den Server nicht aufzuhalten, und Sie haben keinen beliebigen
Zugriff auf die Ergebnismenge (sondern können nur sequenziell
auf die Zeilen zugreifen). Außerdem kennen Sie die Anzahl der
Zeilen in der Ergebnismenge erst, wenn Sie sie alle abgeholt
haben. Hinzu kommt, dass Sie sämtliche Zeilen abholen
müssen, und zwar selbst dann,
wenn Sie mitten in der Verarbeitung die gesuchten Informationen
bereits gefunden haben.
Den Clients ermöglicht diese API, auf Anweisungen in
angemessener Form zu reagieren (also die Zeilen nur nach Bedarf
abzuholen), ohne zu wissen, ob die Anweisung ein
SELECT
ist. Dies erreichen Sie, indem Sie
mysql_store_result()
nach jeder
mysql_query()
(oder
mysql_real_query()
) aufrufen. Wenn der
Ergebnismengenaufruf Erfolg hat, war die Anweisung ein
SELECT
und Sie können die Zeilen einlesen.
Schlägt der Ergebnismengenaufruf fehl, so ermitteln Sie mit
mysql_field_count()
, ob überhaupt ein
Ergebnis zu erwarten war. Wenn
mysql_field_count()
null zurückliefert,
ergab die Anweisung keine Daten (war also ein
INSERT
, UPDATE
,
DELETE
oder etwas Ähnliches), von denen man
auch keine Rückgabezeilen erwarten konnte. Wenn
mysql_field_count()
einen von null
verschiedenen Wert hat, hätte die Anweisung eigentlich Zeilen
zurückgeben sollen, hat es aber nicht getan. Dies deutet auf
eine fehlgeschlagene SELECT
-Anweisung hin.
Ein Beispiel finden Sie unter
mysql_field_count()
.
Sowohl mysql_store_result()
als auch
mysql_use_result()
liefern Ihnen
Informationen über die Felder, aus denen die Ergebnismenge
besteht (die Anzahl der Felder, ihre Namen und Typen und so
weiter). Sie können auf die Feldinformationen in der Zeile
sequenziell zugreifen, indem Sie wiederholt
mysql_fetch_field()
aufrufen, oder anhand der
Feldnummer, indem Sie
mysql_fetch_field_direct()
aufrufen. Die
aktuelle Cursor-Position für das Feld können Sie durch
mysql_field_seek()
ändern. Wenn Sie den
Feld-Cursor verstellen, wirkt sich das auf nachfolgende
mysql_fetch_field()
-Aufrufe aus. Sie können
die Feldinformationen auch alle auf einmal abholen, indem Sie
mysql_fetch_fields()
aufrufen.
Um Fehler zu entdecken und zu melden, gibt Ihnen MySQL über die
Funktionen mysql_errno()
und
mysql_error()
Zugriff auf
Fehlerinformationen. Diese Funktionen geben den Fehlercode oder
die Fehlermeldung für die zuletzt aufgerufene Funktion zurück,
die mit oder ohne Erfolg gelaufen sein kann. So können Sie
ermitteln, wann welcher Fehler aufgetreten ist.
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.