SommaireTelecharger la documentationChapitre suivantChapitre precedent  

  .: News :.: Edito :.: Scripts :.: Forum :.: Erreurs :.: Jobs :. 
 
Sommaire

Référence des fonctions

Apache
Tableaux
Aspell
Nombres de grande taille
Compression Bzip2
Calendrier
Paiement CCVS
Support COM pour Windows
Objets
ClibPDF
Crack
CURL
Paiement Cybercash
CyberMUT : Crédit Mutuel
Administration Cyrus IMAP
Caractères
DBA
Dates et heures
dBase
DBM
dbx
DB++ Functions
Direct IO
Accès aux dossiers
DOM XML
.NET
Gestion des erreurs
FrontBase
FilePro
Système de fichiers
Forms Data Format
FriBiDi
FTP
Fonctions
Gettext (GNU)
GMP
HTTP
Hyperwave
ICAP
Iconv
Images
IMAP
Informix
InterBase
IRC
Java
LDAP
Email
Traitement de email
Mathématiques
Chaînes de caractères multi-octets
MCAL
Chiffrage mcrypt
Fonctions MCVE
Hash
Microsoft SQL Server
Ming pour Flash
Fonctions diverses
mnoGoSearch
mSQL
MySQL
Sessions Mohawk
Fonctions muscat
Réseau
Ncurses : fonctions de contrôle du terminal
Lotus Notes functions
ODBC unifié
Oracle 8
OpenSSL
Oracle
Ovrimos SQL
Entrées/sorties
Overload
PDF
Paiement par Verisign
Options PHP et informations
POSIX
PostgreSQL
Contrôle des processus
Exécution de programmes externes
Printer functions
Pspell
Readline (GNU)
Recode (GNU)
Expressions régulières compatibles Perl
qtdom
Expressions régulières
Sémaphores et gestion de la mémoire partagée
SESAM
Sessions
Mémoire partagée
Shockwave Flash
SNMP
Sockets
Chaîne de caractères
Sybase
URL
Variables
Fonctions vpopmail
API Windows 32 bits
WDDX
Analyseur syntaxique XML
XMLRPC
XSLT
YAZ
NIS
Zip (décompression)
Zlib (Compression)

6.89 SESAM


SESAM/SQL-Server est une base de données mainframe, développée par Fujitsu Siemens Computers, Allemagne. Elle fonctionne sur les serveur mainframe, sous BS2000/OSD.

Sur de nombreuses installation BS2000 en production, SESAM/SQL-Server a prouvé ...

  • La facilité de connectivité Java, Web et client/serveur

  • La disponibilité de plus de 99.99%,

  • La capacité de gérer des dizaines et mêmes des centaines de milliers d'utilisateurs.

Désormais, il existe une interface PHP pour SESAM, qui donne l'accès à cette base aux scripts PHP.

Note
Notes de configuration

Il n'y a pas de support pour l'interface SESAM si PHP est un CGI : elle ne fonctionne que comme module Apache. En module Apache, l'interface SESAM peut être configurée avec les directives Apache. Directives de configuration SESAM

Directive Signification
php3_sesam_oml Nom de la librairie BS2000 PLAM contenant le module du pilote SESAM. Ceci est obligatoire pour utiliser les fonctions SESAM.

Exemple:

php3_sesam_oml $.SYSLNK.SESAM-SQL.030

php3_sesam_configfile Nom du fichier de configuration de l'application SESAM. Ceci est obligatoire pour utiliser les fonctions SESAM.

Exemple:

php3_sesam_configfile $SESAM.SESAM.CONF.AW
Ce fichier contient généralement une configuration comme celle ci (voir dans le manuel de référence SESAM):

CNF=B
NAM=K
NOTYPE

php3_sesam_messagecatalog Nom du fichier de messages SESAM. Dans la plus part des cas, cette directive n'est pas nécessaire. Uniquement si le fichier de messages SESAM n'es pas installé dans la table de messages BS2000. Il peut alors être choisi avec cette directive.

Exemple:

php3_sesam_messagecatalog $.SYSMES.SESAM-SQL.030

En plus de la configuration de l'interface PHP/SESAM, vous devez aussi configurer le serveur SESAM-Database sur votre mainframe, comme d'habitude. Cela signifie notamment qu'il faut :

  • démarrer le gestionnaire de base SESAM (DBH)

  • connecter les bases avec le gestionnaire de bases SESAM

Pour connecter un script PHP au serveur de bases SESAM, les paramètres CNF et NAM de la configuration SESAM selectionnée doivent correspondre à l'id du gestionnaire de base démarré.

Dans le cas des bases de données distribuées, vous devez démarrer un agent SESAM/SQL-DCN, avec la table de distribution incluant le nom de l'hôte et de la base de données.

La communication entre PHP (fonctionnant sur le sous-système POSIX) et le gestionnaire de base (fonctionnant hors du sous-système POSIX) est réalisée par un pilote spécial appelé SQLSCI et le module de connexion SESAM, qui utilise la mémoire partagée. A cause de la mémoire partagée, et parce que PHP est une partie statique du serveur web, les accès à la base de données sont extrêmement rapide, car il ne requièrent pas de connexion distante via ODBC, JDBC ou UTM.

Seul un chargeur de stub (stub loader, SESMOD) est compilé dans PHP. Les modules de connexion SESAM proviennent de la librairie OML PLAM. Dans la configuration, vous devez indiquer à PHP le nom de la librairie PALM, et le fichier de lien à utiliser pour la configuration de SESAM (En SESAM V3.0, SQLSCI est disponible dans la librairie d'outils SESAM (SESAM Tool Library), qui fait partie de la distribution standard).

Les commandes SQL imposent que les guillemets simples soient doublés pour être interprété litéralement (contrairement à d'autres bases de données qui utilisent un guillemet simple, précédé d'un antislash), il est recommandé d'activer les directives PHP php3_magic_quotes_gpc et php3_magic_quotes_sybase.

Note
Exécutions

A cause des limitations du modèle de processus BS2000, le pilote peut être chargé uniquement après que le serveur Apache ait généré le processus fils. Cela ralentit légèrement le traitement de la première requête, mais toutes les requêtes suivantes seront effecutée à pleine vitesse.

Lorsque vous définissez explicitement le catalogue de messages SESAM, ce catalogue ser chargé à chaque fois que le pilote est chargé (i.e., au moment de la requête initiale). Le système d'exploitation BS2000 affiche un message après avoir correctement chargé le catalogue de messages, qui sera envoyé au fichier d'erreurs Apache. BS2000 ne permet pas la suppression de ce message, qui va remplir progressivement ce fichier.

Assurez vous que la librairie SESAM OML PLAM et le fichier de configuration SESAM sont accessibles par l'utilisateur qui fait tourner le serveur web. Sinon, le serveur ne sera pas capable de charger le pilote, ou d'appeler les fonctions SESAM. L'accès à la base doit être donné à cet utilisateur. Sinon, les connexions SESAM échoueront.

Note
Types de curseurs

Les curseurs de résultat sont alloués pour les requêtes SQL de selection, peuvent être soit "séquentiels", soit "à défilement" ("scrollable"). Les curseurs à défilement sont beaucoup plus gourmands en mémoire, et le mode par défaut est séquentiel.

Lorsque vous utilisez les curseurs à défilement, le curseur peut être positionné librement dans le résultat. Pour chaque requête à défilement, il existe des valeurs globales de types de défilement (initialisée à :SESAM_SEEK_NEXT) et la position peut être fixée une seule fois par sesam_seek_row ou bien à chaque appel, avec la fonction sesam_fetch_row. Lorsque vous lisez une ligne avec un curseur à défilement, le traitement suivant est effectué à partir des valeurs globales de type de défilement et de position : Scrolled Cursor Post-Processing

Type de défilement Action
SESAM_SEEK_NEXT aucun
SESAM_SEEK_PRIOR aucun
SESAM_SEEK_FIRST le type de défilement devient SESAM_SEEK_NEXT
SESAM_SEEK_LAST le type de défilement devient SESAM_SEEK_PRIOR
SESAM_SEEK_ABSOLUTE incrémente automatiquement la valeur interne de position
SESAM_SEEK_RELATIVE aucune. conserve les valeurs globales par défaut de position, ce qui permet, par exemple de lire toutes les 10 lignes, en arrière.

Note
Porting note

En PHP, il est naturel de commencer les index à zéro (plutôt que 1), et quelques adaptations ont été faite pour l'interface SESAM : à chaque fois qu'un tableau indexé commence à l'index 1 en SESAM natif, l'interface PHP utilisera l'index 0 comme point de départ. Par exemple, lorsque vous lisez des données avec sesam_fetch_row, la première colonne sera à l'index 0, et les suivantes suivront juqu'au nombre de colonne (exclus) du résultat ($array["count"]). Lors du portage d'applications depuis d'autres langage évolués vers le PHP, soyez attentifs à ce changement. A chaque fois que c'est nécessaire, la description d'une fonction PHP SESAM indique que l'index du tableau commence à 0.

Note
Sécurité

Lorsque vous autorisez l'accès à une base de données SESAM, le serveur web doit avoir le minimum de privilèges possible. Pour la plus part des bases de données, seul le droit de lecture doit être fourni. Suivant votre utilisation, ajoutez d'autres droits d'accès au fur et à mesure de vos besoins. Ne donnez jamais le contrôle total de vos bases à un utilisateur du web! Limitez l'accès aux scripts PHP qui doivent administrer la base en utilisant un mot de passe et/ou une sécurisation SSL.

Note
Migration d'une autre base SQL

Deux langage SQL ne sont jamais 100% compatibles. Lorsque vous portez une application SQL depuis une autre interface vers SESAM, certaines adaptation doivent être faîtes. Les différences suivantes sont les plus courantes :

  • Types de données spécifiques

    Certains types de données spécifiques à une base doivent être remplacés par les types de données standard SQL. (i.e., TEXT doit être remplacé par VARCHAR(taille max)).

  • Mots reservés comme identifiants SQL.

    En SESAM (comme dans le standard SQL), les mots reservés utilisés comme identifiants doivent être entourés de guillemets doubles (ou renommés).

  • Taille d'affichage des données.

    Les types de données SESAM ont une taille de stockage, mais par de taille d'affichage. A la place de int(4) (c'est à dire : les entiers jusqu'à '9999'), SESAM requiert simplement int, pour une taille implicite de 31 bits. De même, les seuls types de date disponible dans SESAM sont : DATE, TIME(3) et TIMESTAMP(3).

  • Les types de données unsigned (non signé), zerofill (complété avec des zéros), ou auto_increment

    Unsigned et zerofill ne sont pas supportés. Auto_increment est automatique (utilisez "INSERT ... VALUES(*, ...)" au lieu de "... VALUES(0,...)" pour profiter des auto-increment implicites de SESAM.

  • int ... DEFAULT '0000'

    Les variables numériques ne doivent pas être initialisées avec des constantes de type chaîne de caractères. Utilisez

    DEFAULT 0
    à la place. Pour initialiser une date, la chaîne doit être préfixée avec le type de date adapté, tel que : CREATE TABLE exmpl (xtime timestamp(3) DEFAULT TIMESTAMP '1970-01-01 00:00:00.000' NOT

  • $count = xxxx_num_rows();

    Certaines bases de données essaient d'estimer le nombre de lignes d'un résultat, même grossièrement approximativement. SESAM ne connait pas le nombre de lignes avant de les avoir lues lui-même. Si vous avez vraiment besoin de les compter, utilisez la commande

    SELECT COUNT(...) WHERE ...
    , qui vous dira combien de lignes sont disponibles. Une deuxième requête devrait vous retourner tous ces résultats.

  • DROP TABLE lenom;

    Avec SESAM, dans la commande

    DROP TABLE
    , le nom de la table doit être suivi du mot clé RESTRICT ou CASCADE. Avec RESTRICT, une erreur est retounrée si il y a des objets dépendant (par exemple, des vues), tandis qu'avec CASCADE, les objets dépendants seront supprimés en même temps que la table.

Note
Notes sur l'utilisation de types SQL divers

SESAM ne supporte pas le type BLOB. Une future version de SESAM devra le faire.

L'interface PHP effectue automatiquement les conversions suivantes lors de la lecture de lignes de résultats SQL : Conversion de type SQL vers PHP

Type SQL Type PHP
SMALLINT, INTEGER "integer" (entier)
NUMERIC, DECIMAL, FLOAT, REAL, DOUBLE "double" (nombre à virgule flottante)
DATE, TIME, TIMESTAMP "string"(chaîne de caractères)
VARCHAR, CHARACTER "string"(chaîne de caractères)
Lorsque vous lisez une ligne entière, le résultat est retourné sous la forme d'un tableau. Les champs vides ne sont pas remplis, et vous aurez à vérifier vous même l'existence des champs ( (utilisez isset ou empty pour tester les champs vides). Cela donne plus de contrôle à l'utilisateur sur l'apparence des champs que si les champs vides étaient représenté par des chaînes vides).

Note
Support des "champs multiples" de SESAM

La fonctionnalité spéciale des "champs multiples" de SESAM permet à une colonne de contenir un tableau de champs. Un tel "champs multiple" peut être créé comme ceci :
Création d'une colonne de champs multiples

CREATE TABLE multi_field_test
(
     pkey  CHAR(20) PRIMARY KEY,
     multi(3)   CHAR(12)
)
et peut être remplie avec :
Affectation d'une colonne de type "champs multiple"

INSERT INTO multi_field_test ( pkey, multi(2..3) )
  VALUES ( 'Second', <'first_val','second_val>)
Notez que (comme c'est le cas ci-dessus), les sous-champs vides initiaux sont ignorés, et que le tableau est alors compacté, ce qui fait que l'exemple ci-dessus conduit à un tableau multi(1..2) au lieu de multi(2..3).

Lors de la lecture d'une ligne, les "champs multiples" sont mis en colonne. Dans l'exemple ci-dessu, "pkey" prend l'index 0, et les trois colonnes "multi(1..3)" sont accessibles depuis les index 1 à 3.

Pour de plus amples détails sur SESAM, reportez vous à la documentation SESAM/SQL-Server en anglais ou SESAM/SQL-Server en allemand, disponibles toutes deux en ligne, ou en manuels.

Sommaire


Chapitre précédentChapitre suivantAccueil nexen.net