Vorwort
Diese "Referenz" zeigt nur die allerwichtigsten ODBC-Befehle. Für eine
ausführlichere Referenz empfehle ich die
PHP-Referenz.
Viele dieser Befehle sind ähnlich den Datenbankspezifischen aufgebaut. Durch Ersetzen
des ODBC_ durch z.B. IBASE_ oder MYSQL_ erreicht man eine höhere Performance und
ist nicht auf ODBC angewiesen. Dabei verliert man jedoch auch die Möglichkeit,
mit anderen Datenbanken zusammenzusarbeiten (für diese müsste dann der gesamte Code
geändert werden). Zu den MySQL-Befehlen lesen Sie bitte auch die
MySQL-Referenz.
ODBC_CONNECT(...)

|
int odbc_connect(string dsn, string user, string password, int [cursor_type]); |
Ist Voraussetzung in jedem PHP-Programm, das ODBC benutzt. DSNs vergibt man z.B. in der
Windows-Systemsteuerung (siehe:
ein eigenes
Testsystem aufbauen
), Benutzername und Passwort vergibt man sich in der Datenbank(-Verwaltung).
Als Cursor-Type ist
SQL_CUR_USE_ODBC zu empfehlen. Der Rückgabewert der Funktion identifiziert im weiteren
Programmverlauf die Datenbank, ist also wichtig.
$dbh = odbc_connect('testdb', 'aname', 'apwd', SQL_CUR_USE_ODBC);
ODBC_CLOSE_ALL()
Schließt alle Datenbankverbindungen und ist am Ende jedes Programmes, das ODBC_CONNECT
benutzt hat, aufzurufen.
ODBC_CLOSE(int id)
ist zwar ähnlich, aber
ODBC_CLOSE_ALL() ist komfortabler und sicherer -- falls man dann doch mal vergessen sollte
eine Datenbank zu schließen.
odbc_close_all();
ODBC_EXEC(...)

|
int ODBC_EXEC(int connection_id, String query_string); |
führt eine SQL-Anweisung aus. übergeben müssen Sie die ID der Datenbank und
den SQL-String. Zurückgeliefert wird false für fehlerhafte Ausführung und ansonsten
eine Identifikation des Ergebnisses (z.B. bei Select-Anweisungen wichtig).
$res=odbc_exec ($dbh, "insert into kueche values ('Messer')");
ODBC_FETCH_ROW(...)

|
int odbc_fetch_row(int result_id, int [row_number]); |
Lädt in der Form
int odbc_fetch_row(int result_id);
die nächste
Zeile und liefert true zurück, falls es eine gibt und in der Form
int odbc_fetch_row(int result_id, int row_number);
lädt
es eine bestimmte Zeile.
while(odbc_fetch_row($res))
{
$name=odbc_result("Name"); // angenommen die Datenbank hat eine Spalte namens Name
echo " $name ";
}
ODBC_RESULT(...)

|
string odbc_result(int result_id, mixed field); |
"field" ist lediglich entweder die Nummer oder der Name der zurückzuliefernden
Spalte. Hierbei ist der Name zu empfehlen, weil sich ansonsten Fehler
drohen wenn an den Tabellen noch "geschraubt" wird.
Nur nach ODBC_FETCH_ROW(...)
anzuwenden
! Um jede Spalte zurückgeliefert zu bekommen ist ODBC_RESULT aus
Performancegründen eigentlich eine Todsünde, jedoch in ODBC schwer anders zu
realisieren (unter MYSQL geht da die Sache z.b. mit mysql_fetch_object(...) nach
einem mysql_db_query(...), in ODBC z.B. mit ODBC_FETCH_INTO()).
while(odbc_fetch_row($res))
{
$name=odbc_result($res,"Name"); // angenommen die Datenbank hat eine Spalte namens Name
echo " $name ";
}
Hinweis: ODBC_RESULT gibt Ihnen bei SQL-Anfragen wie
SELECT MAX(ID) FROM MYTABLE
oder
SELECT AVG (INCOME) FROM HOUSEHOLDS
,
also bei Anfragen in der kein Spaltenname existiert, das Ergebnis entweder
in der 0ten Spalte zurück oder in dem feld mit der Arithmetischen Operation.
$res=odbc_exec ($dbh, "SELECT MAX(name) FROM NAMEN");
if odbc_fetch_row($res)
{
$name=odbc_result($res,0);
$name=odbc_result($res,"MAX(name)");
}
ODBC_NUM_ROWS(...)

|
int odbc_num_rows(int result_id); |
Liefert die Anzahl der Zeilen im Ergebnis zurück. Nützlich z.B.
bei Selects mit einer Where-Bedingung oder eben um die Anzahl der
Datenbankeintragungen zu wissen.
$zeile=odbc_num_rows($res)-10;
if ($zeile<0) $zeile=0;
while(odbc_fetch_row($res,$zeile))
{
$zeile++;
$name=odbc_result("Name"); // angenommen die Datenbank hat eine Spalte namens Name
echo " $name "; // gibt die letzten 10 Namen aus.
}
ODBC_AUTOCOMMIT(...)

|
bool odbc_autocommit(resource connection_id [,bool OnOff]); |
Legt fest, ob nach jedem ODBC-Befehl automatisch ein Datenbank-Commit ausgelöst wird
(Standard: On). Wenn ja, wird jeder Befehl als abgeschlossene
Transaktion behandelt.
Die Einstellung Off erlaubt also, mehrere ODBC-Befehle zu einer Transaktion zusammen
zu fassen.
// Dieses Beispiel führt eine Überweisung über $betrag von $konto1 auf $konto2 durch.
// Wenn ein Konto nicht existiert, wird weder die Abbuchung, noch die Zubuchung durchgeführt
$dbh=odbc_connect('bank','','',SQL_CUR_USE_ODBC);
odbc_autocommit($dbh,"Off");
odbc_exec($dbh,'update konto set kontostand=kontostand-'.$betrag.' where kontonummer='.$konto1);
odbc_autocommit($dbh,"On");
// Beim nächsten ODBC-Befehl wird das DB-Commit ausgelöst
odbc_exec($dbh,'update konto set kontostand=kontostand+'.$betrag.' where kontonummer='.$konto2);
// ...
ODBC_COMMIT(...)

|
bool odbc_commit(resource connection_id); |
Löst das ODBC-Commit manuell (nicht-automatisch) aus. Dadurch wird die Transaktion ganz
durchgeführt. Komplementär ist
int odbc_rollback(int connection_id), welches das Datenbanksystem
veranlasst, die Transaktion garnicht durchzuführen.
// Dieses Beispiel führt eine Überweisung über $betrag von $konto1 auf $konto2 durch.
// Wenn konto1 zu wenig Geld hat, wird nichts durchgeführt.
$dbh=@odbc_connect('bank','','',SQL_CUR_USE_ODBC);
odbc_autocommit($dbh,"Off");
odbc_exec($dbh,'update konto set kontostand=kontostand-'.$betrag.' where kontonummer='.$konto1);
odbc_exec($dbh,'update konto set kontostand=kontostand+'.$betrag.' where kontonummer='.$konto2);
$res=odbc_exec($dbh,'select kontostand from konto where kontonummer='.$konto1);
$kontostand=odbc_result($res,'kontostand');
if ($kontostand<0)
{odbc_rollback($dbh);}
else
{odbc_commit($dbh);}
// ...