PHP  
downloads | documentation | faq | getting help | mailing lists | | php.net sites | links | my php.net 
search for in the  
<shm_removesesam_affected_rows>
view the version of this page
Last updated: Sat, 19 Apr 2003

XCII. SESAM Datenbankfunktionen

SESAM/SQL-Server ist ein von Fujitsu Siemens Computers in Deutschland entwickeltes Mainframe-Datenbanksystem f�r High-End Server mit dem Betriebssystem BS2000/OSD.

In zahlreichen BS2000-Installationen hat SESAM/SQL-Server unter Beweis gestellt:

  • die einfach zu handhabende Unterst�tzung von Java-, Web- und Client-Server-Anwendungen

  • eine Hochverf�gbarkeit von mehr als 99,99 %

  • die F�higkeit, bis zu mehrere hunderttausend Benutzer zu bedienen

Mit einer PHP3 SESAM-Schnittstelle sind jetzt auch Datenbank-Operationen per PHP-scripts m�glich.

Konfigurationshinweise: Die PHP-SESAM-Schnittstelle muss als Modul in Apache integriert werden. Stand-alone-Betrieb ist nicht m�glich. Im Apache-PHP-Modul ist die SESAM-Schnittstelle entsprechend den Apache-Vorschriften zu konfigurieren.

Tabelle 1. SESAM-Konfigurationsvorschriften

DirectiveBedeutung
php3_sesam_omlName der BS2000-PLAM-Bibliothek mit den ladbaren Modulen des SESAM-Treibers. F�r die Nutzung von SESAM-Funktionen erforderlich.

Beispiel:

php3_sesam_oml $.SYSLNK.SESAM-SQL.030

php3_sesam_configfileName der Konfigurationsdatei der SESAM-Anwendung. F�r die Nutzung von SESAM-Funktionen erforderlich.

Example:

php3_sesam_configfile $SESAM.SESAM.CONF.AW

enth�lt im allgemeinen folgende Konfiguration (siehe auch SESAM Referenzhandbuch):

CNF=B
NAM=K
NOTYPE

php3_sesam_messagecatalogName des SESAM-Meldungskatalogs. Nur erforderlich, wenn der SESAM-Meldungskatalog nicht im BS2000-Meldungkatalog enthalten ist.

Example:

php3_sesam_messagecatalog $.SYSMES.SESAM-SQL.030

Zus�tzlich zur PHP-SESAM-Schnittstelle muss nat�rlich die SESAM-Datenbank selbst auf dem BS2000-System installiert und konfiguriert werden:

  • der SESAM database handler (DBH) muss gestartet sein

  • die Datenbank und der DBH m�ssen verbunden sein

F�r eine Verbindung zwischen dem PHP script und dem DBH m�ssen die Parameter von CNF und NAM der SESAM-Konfiguration den Werten des im BS2000 gestarteten DBH ensprechen.

Bei verteilten Datenbanken muss ein SESAM/SQL-DCN-Agent gestartet werden, dessen Konfigurationstabelle Host- und Datenbank-Namen enth�lt.

Die Kommunication zwischen PHP im BS2000-Subsystem POSIX und dem DBH im BS2000 erfolgt �ber Zugriffe eines speziellen Treibermoduls (SQLSCI) und der SESAM-Anschlu�module auf einen gemeinsamen Speicherbereich (common memory). Der common-memory-pool-Mechanismus und die Tatsache, dass PHP in den Webserver statisch eingebunden ist, machen die Datenbankzugriffe sehr schnell. Datenbankzugriffe �ber ODBC, JDBC or UTM sind nicht erforderlich.

Nur ein kleines Lademodul (SESMOD) wird zum PHP gebunden, w�hrend die SESAM-Anschlu�module aus der SESAM-OML (PLAM-Bibliothek) nachgeladen werden. library. In der PHP-Konfiguration,muss diese SESAM-OML und der f�r die SESAM-Konfiguration erforderliche Linkname angegeben werden (SQLSCI ist wie in SESAM V3.0 in der Standard-SESAM-Toolbibliothek verf�gbar).

Wegen der SQL-Syntaxvorschriften f�r Anf�hrungszeichen (doppelte Anf�hrungszeichen statt Anf�hrungszeichen mit vorangestelltem Gegenschr�gstrich wie in manchen anderen Datenbanken) wird empfohlen, die PHP-Konfigurationsvorschriften php3_magic_quotes_gpc und php3_magic_quotes_sybase f�r alle SESAM betreffenden PHP-scripts auf On zu setzen.

�berlegungen zur Ablaufzeit: Wegen der spezifischen Eigenschaften der BS2000-Proze�steuerung kann der Treiber erst nach dem fork des Apache-Servers f�r seine Sohn-Prozesse geladen werden. Der erste SESAM-Zugriff jedes dieser Prozesse wird dadurch etwas verlangsamt, alle weiteren Zugriffe werden jedoch ohne Beeintr�chtigung abgearbeitet.

Ein explizit definierter SESAM-Meldungskatalog wird bei jedem Laden des Treibers (d.h. beim ersten SESAM-Zugriff) geladen. BS2000 erzeugt nach dem erfolgreichen Laden dieses Katalogs eine Meldung, die an die error_logfile von Apache geschickt wird. Da BS2000 z. Zt. ein Unterdr�cken dieser Meldung nicht erlaubt, wird das logfile langsam damit vollgeschrieben.

Bitte beachten: die SESAM-OML (PLAM-Bibliothek) und die SESAM-Konfigurationsdatei m�ssen f�r die Benutzerkennung, unter der der Webserver l�uft, lesbar sein! Andernfalls kann der Server den Treiber nicht laden, womit die SESAM-Funktionen nicht zur Verf�gung stehen. Auch der Zugriff die Datenbank selbst muss dem Server m�glich sein, da sonst keine Verbindung zum DBH m�glich ist.

Cursor Typen: Die f�r SQL-Abfragen "select type" zugewiesenen Ergebniscursor k�nnen "sequential" oder "scrollable" sein, Standardwert ist wegen des geringeren Speicherbedarfs "sequential"

"Scrollable" Cursors k�nnen im Ausgabedatensatz beliebig positioniert werden. F�r jede "scrollable" Abfrage gibt es globale Standardwerte f�r den Scroll-Typ (initialisiert zu: SESAM_SEEK_NEXT) und der Scrolling-Abstand, der entweder einmal mit: sesam_seek_row() oder jedesmal beim Lesen einer Zeile mit: sesam_fetch_row() gesetzt werden kann. Die folgende Tabelle zeigt die Behandlung der globalen Stadtardwerte f�r Scroll-Typ und Scroll-Abstand beim Lesen einer Zeile mit "scrollable" Cursor:

Tabelle 2. Scrolled Cursor Post-Processing

Scroll TypeAction
SESAM_SEEK_NEXTnone
SESAM_SEEK_PRIORnone
SESAM_SEEK_FIRSTset scroll type to SESAM_SEEK_NEXT
SESAM_SEEK_LASTset scroll type to SESAM_SEEK_PRIOR
SESAM_SEEK_ABSOLUTEAuto-Increment internal offset value
SESAM_SEEK_RELATIVEnone. (maintain global default offset value, which allows for, e.g., fetching each 10th row backwards)

Bemerkungen zur Portierung: Da in PHP Indizes �blicherweise mit NULL gestartet werden, musste die SESAM-Schnittstelle entsprechend adaptiert werden: w�hrend in der "normalen" SESAM-Schnittstelle ein Array mit Index 1 beginnt, wird in PHP NULL als Startpunkt verwendet - z.B. hat beim Lesen von Spalten mit sesam_fetch_row() die erste Spalte den Index 0 und the folgenden Spalten haben Indizes bis zu (aber nicht einschlie�lich!) dem Spaltenindex ($array["count"]). Beim Portieren von SESAM-Anwendungen aus aus anderen h�heren Programmiersprachen nach PHP ist diese Schnittstellen�nderung zu beachten. Wo es erforderlich ist, beinhaltet die jeweilige PHP-SESAM-Funktion einen Hinweis auf die mit NULL beginnende Indizierung.

Sicherheitsaspekte: Beim Zugriff auf SESAM-Datenbanken sollte der normale Benutzer eines Web-Servers nur die allern�tigsten Privilegien bekommen. Im allgemeinen sollte auf Datenbanken nur lesender Zugriff m�glich sein. Weitergehende Rechte sollten - nur falls wirklich erforderlich - abh�ngig vom jeweiligen Einsatzfall eingerichtet werden. Auf keinen Fall sollte man beliebigen Benutzern im Internet volle Zugriffsrechte auf eine Datenbank gew�hren! Der Zugriff auf PHP-scripts f�r die Datenbank-Administration sollte in jedem Fall per Passwort und/oder durch SSL-Verbindung gesch�tzt sein.

Migration von anderen SQL-Datenbanken: Unterschiedliche SQL-Auspr�gungen sind nie 100-prozentig kompatibel. Bei der Portierung von SQL-Anwendungen anderer Datenbanken nach SESAM k�nnen daher Anpassungen erforderlich sein. Auf folgende, typische Unterschiede sei besonders hingewiesen:

  • Herstellerspezifische Datentypen

    Manche herstellerspezifischen Datentypen m�ssen u.U. durch Standard-SQL-Typen ersetzt werden, wie z.B. TEXT in VARCHAR(max. size).

  • Schl�sselw�rter als SQL-Bezeichner

    In SESAM m�ssen Schl�sselw�rter in Anf�hrungsstrichen (???) angegeben werden (SQL-Standard) Schl�ssel.

  • L�nge der Anzeige in Datentypen

    Datentypen in SESAM sind nicht durch L�ngenangabe, sondern durch ihre Genauigkeit spezifiziert. Statt int(4) f�r ganze Zahlen bis '9999' braucht SESAM lediglich int f�r eine implizite L�nge von 31 Bit. Als Datentypen f�r Datum und Zeit gibt es in SESAM nur: DATE, TIME(3) und TIMESTAMP(3).

  • SQL-Datentypen mit herstellerspezifischen Attributen der Form: unsigned, zerofill, oder auto_increment attributes

    Unsigned und zerofillwerden nicht unterst�tzt. Um die SESAM-implizite automatische Erh�hung zu nutzen, gibt es anstelle von "... VALUES(0, ...)" automatisch Auto_increment ( "INSERT ... VALUES(*, ...)". .

  • int ... DEFAULT '0000'

    Numerische Variablen d�rfen nicht mit Zeichenkonstanten initialisiert werden. Statt dessen ist DEFAULT 0 zu verwenden. Dem Initialisierungs-string f�r Variablen des SQL-Datentyps datetime muss das jeweilige Schl�sselwort als Prefix vorangestellt werden wie in CREATE TABLE exmpl ( xtime timestamp(3) DEFAULT TIMESTAMP '1970-01-01 00:00:00.000' NOT NULL );

  • $count = xxxx_num_rows();

    Manche Datenbanken liefern die gesch�tzte/erratene Anzahl von Ausgabezeilen als Abfrageresultat an, obwohl der gelieferte Wert grob falsch ist. SESAM kennt die Anzahl von Ausgabezeilen erst, wenn sie tats�chlich gelesen wurden. Falls diese Information TATS�CHLICH ben�tigt wird, sollte man SELECT COUNT(...) WHERE ..., versuchen. Diese Funktion ermittelt die Anzahl der Treffer. Ein zweiter Aufruf liefert (hoffentlich) die eigentlichen Ergebnisse.

  • DROP TABLE thename;

    In SESAM muss im Kommamdo DROP TABLE der Name entweder um die Schl�sselw�rter RESTRICT oder CASCADE erg�nzt werden. Bei der Angabe von RESTRICT wird ein Fehler gemeldet, wenn abh�ngige Objekte (z.B. VIEWs) existieren, w�hrend bei CASCADE abh�ngige Objekte zusammen (???) mit der definierten Tabelle gel�scht werden.

Bemerkungen zu weiteren SQL-Datentypen: SESAM unterst�tzt z.Zt. keine Daten von Typ BLOB. F�r zuk�nftige SESAM-Versionen ist diese Unterst�tzung geplant.

Bei SQL-Abfragen werden von der PHP-Schnittstelle folgende Datentypen automatisch konvertiert:

Tabelle 3. SQL to PHP Type Conversions

SQL TypePHP Type
SMALLINT, INTEGER"integer"
NUMERIC, DECIMAL, FLOAT, REAL, DOUBLE"double"
DATE, TIME, TIMESTAMP"string"
VARCHAR, CHARACTER"string"
Bei Abfragen auf ganze Zeilen wird das Ergebnis als Array geliefert. Leere Felder werden nicht gef�llt, d.h. ihre Existenz muss explizit mit isset() oder empty() �berpr�ft werden. Dies erm�glicht dem Benutzer eine bessere Kontrolle als durch R�ckgabe eines Leer-strings zur Darstellung eines leeren Feldes.

Unterst�tzung der SESAM-Features "multiple fields": Diese spezielle SESAM-Funktion erlaubt die Definiton von Spalten als Feld-Array. Eine "multiple field" Spalte wird wie folgt definiert:

Beispiel 1. Creating a "multiple field" column

CREATE TABLE multi_field_test
(
     pkey  CHAR(20) PRIMARY KEY,
     multi(3)   CHAR(12)
)
und folgenderma�en ausgef�llt:

Beispiel 2. Filling a "multiple field" column

INSERT INTO multi_field_test ( pkey, multi(2..3) )
  VALUES ( 'Second', <'first_val','second_val'>)
Zur Beachtung: f�hrende leere Unterfelder (wie in diesem Fall) werden ignoriert und die enthaltenen Werte damit verworfen, so dass in obigem Beispiel das Ergebnis als multi(1..2) angezeigt wird und nicht als multi(2..3).

Bei der Ausgabe von Ergebniszeilen wird auf "multiple columns" wie auf "inlined" zus�tzliche Spalten zugegriffen. Im obigen Beispiel bekommt "pkey" den Indexwert NULL und auf die drei Spalten "multi(1..3)" kann mit den Indizes 1 bis 3 zugegriffen werden.

SESAM-spezifische Details sind in den Handb�chern oder beschrieben. Beide Manuale sind online abrufbar und stehen in gedruckter Form zur Verf�gung.

Inhaltsverzeichnis
sesam_affected_rows -- Anzahl der von einer sofortigen (???) Abfrage betroffenen Zeilen
sesam_commit -- Schreibt noch nicht gesicherte �nderungen in die SESAM-Datenbank
sesam_connect -- Er�ffnet die Verbindung zu einer SESAM-Datenbank
sesam_diagnostic -- Liefert Status-Informationen �ber den letzten SESAM-Aufruf
sesam_disconnect -- Trennen der Verbindung zu einer SESAM-Datenbank
sesam_errormsg -- Liefert die Fehlermeldung des letzten SESAM-Aufrufs
sesam_execimm -- Ausf�hren einer "immediate" SQL-Anweisung
sesam_fetch_array -- Liefert eine Zeile als assoziatives Array
sesam_fetch_result -- Liefert das Ergebnis einer Abfrage (ganz oder teilweise)
sesam_fetch_row -- Lesen einer Zeile als Array
sesam_field_array --  Liefert Meta-Information �ber einzelne Ergebnisspalten
sesam_field_name --  Liefert einen Spaltennamen des Ausgabesatzes
sesam_free_result -- Gibt Betriebsmittel f�r die Abfrage frei (der Abfrage ???)
sesam_num_fields -- Liefert die Anzahl von Feldern/Spalten in einem Ausgabesatz
sesam_query -- Durchf�hren einer SESAM-SQL-Abfrage und aufbereiten der Ergebnisse
sesam_rollback -- Verwirft alle noch nicht gesicherten �nderungen der SESAM-Datenbank
sesam_seek_row --  Setzt "scrollable Cursor" Modus f�r weitere Aufrufe
sesam_settransaction -- Parameter der SESAM-Transaction setzen


User Contributed Notes
SESAM Datenbankfunktionen
add a note
There are no user contributed notes for this page.

<shm_removesesam_affected_rows>
 Last updated: Sat, 19 Apr 2003
show source | credits | mirror sites 
Copyright © 2001-2003 The PHP Group
All rights reserved.
This mirror generously provided by: /
Last updated: Wed May 14 01:12:44 2003 CEST