Einführung - Portabilität

Einführung - Portabilität – Funktionen zur Portabilität zwischen Datenbanken

Description

Jedes Datenbank-Management-System (DBMS) hat seine eigenen Verhaltensweisen, trotz des gemeinsamen SQL-Standards. Z.B. einige Datenbanken geben den Spaltennamen in Großbuchstaben aus, andere in Kleinbuchstabe, und manche wie er definiert wurde. Diese Eigenarten erschweren die Kompatibilität von Skripten zwischen verschieden DBMS. PEAR::DB bemüht sich dieses Unterschiede zu minimieren, damit Programme unter verschiedenen DBMS funktionieren.

Sie können den Portabilitäts-Modus mit der Konfigurations-Option portability aktivieren. Diese können Sie bei der Methode connect() setzen oder über die setOption()-Methode.

Es stehen verschieden Modi zur Verfügung, die miteinander bei Bit-Verknüpfung kombiniert werden können. Dazu benutzen Sie das Zeichen | zum verknüpfen und das Zeichen ^ um einen Modus zu entfernen. Weiter unten finden Sie einige Beispiele, die dies zeigen.

Konstanten der Portabilitäts-Modi

  • DB_PORTABILITY_ALL

    Aktiviert alle Portabilitäts-Funktionen

  • DB_PORTABILITY_DELETE_COUNT

    Erzwingt die Rückmeldung, wieviele Datensätze gelöscht wurden. Einige DBMS geben nicht die Anzalh gelöschter Datensätze zurück, wenn eine einfache DELETE FROM tablename-Abfrage durchgeführt wurde. Dieser Modus ergänzt bei Löschabfragen einfach WHERE 1=1 am Ende der Abfrage, da diese dann die Anzahl zurückliefern.

  • DB_PORTABILITY_ERRORS

    Gleicht die Fehlermeldung bestimmter Treiber denen anderer DBMS an.

    Neuzuweisung der Fehlermeldungen
    Treiber Beschreibung Alte Konstante Neue Konstante
    mysql, mysqli Unique und PrimaryKey Contraints DB_ERROR_ALREADY_EXISTS DB_ERROR_CONSTRAINT
    mysql, mysqli Not-null Constraints DB_ERROR_CONSTRAINT DB_ERROR_CONSTRAINT_NOT_NULL
    odbc(access) Mircosofts ODBC-Treiber liefert bei der Fehlermeldung no such field fälschlicherweise den Fehlercode 07001, was aber bedeutet too few parameters. DB_ERROR_MISMATCH DB_ERROR_NOSUCHFIELD

  • DB_PORTABILITY_LOWERCASE

    Konvertiert die Tabellennamen und Felder immer zu Kleinbuchstaben, wenn auf sie per get*(), fetch*() oder tableInfo() zugegriffen wird.

  • DB_PORTABILITY_NONE (default)

    Schaltet die Portabilitäts-Funktionen aus.

  • DB_PORTABILITY_NULL_TO_EMPTY

    Konvertiert null-Werte in leere Zeichenkette bei der Rückgabe über get*() und fetch*(). Dies ist für Oracle notwendig, da es leere Zeichenkette als null-Wert interpretiert, während andere dazwischen unterscheiden.

  • DB_PORTABILITY_NUMROWS

    Benötigt, damit numRows() in Oracle funktioniert.

  • DB_PORTABILITY_RTRIM

    Beschneidet Leerzeichen am Ende der Daten, die per get*() und fetch*() geholt werden.

Rückwärtkompatibilität

Einige Funktionen wurden bereits über die optimize-Option aktiviert, diese sollte aber nicht mehr verwendet werden. Wenn diese Option mit dem Wert portability aufgerufen wird, werden bei den folgenden Datenbanken diese Modi angestellt:

  • oci8: DB_PORTABILITY_LOWERCASE und DB_PORTABILITY_DELETE_COUNT

  • fbsql, mysql, mysqli, sqlite: DB_PORTABILITY_DELETE_COUNT

Wenn die optimize-Option auf performance gestellt wird, wird der Portabilitäts-Modus auf DB_PORTABILITY_NONE gesetzt.

Example

Alle Optionen anschalten beim Verbindungsaufbau

<?php
require_once 'DB.php';

$dsn 'mysql://user:password@host/database'
$options = array(
    
'debug'       => 2,
    
'portability' => DB_PORTABILITY_ALL,
);

$db =& DB::connect($dsn$options);
if (
PEAR::isError($db)) {
    die(
$db->getMessage());
}
?>

setOption() benutzen, um die Portabilität für vollständige Kleinschreibung und Beschneidung einzuschalten.

setOption 1

<?php
// Once you have a valid DB object named $db...
$db->setOption('portability',
        
DB_PORTABILITY_LOWERCASE DB_PORTABILITY_RTRIM);
?>

setOption() benutzen, um alle Portabilitätsmodi anzuschalten, mit der Ausnahme der Beschneidung.

setOption 2

<?php
// Once you have a valid DB object named $db...
$db->setOption('portability',
        
DB_PORTABILITY_ALL DB_PORTABILITY_RTRIM);
?>
Automatische Vorbereitung und Ausführung von SQL-Anweisungen (Previous) Sequenzen und Auto-Inkrements (Next)
Last updated: Sun, 19 Dec 2010 — Download Documentation
Do you think that something on this page is wrong? Please file a bug report or add a note.
View this page in:

User Notes:

There are no user contributed notes for this page.