Introduction - Portabilité

Introduction - Portabilité – Portabilité de base de données

Description

Chaque système de gestion de base de données (DBMS) possède son propre comportement. Par exemple, quelques base de données mettent les noms des champs en majuscules lors de l'affichage, d'autres les mettent en minuscule, d'autres encore ne font rien. Ces différences rendent difficile le portage de scripts d'un type de serveur à un autre. PEAR DB essaye de s'adapter au mieux pour diminuer ces différences, pour que vos migrations ne soient plus un calvaire.

Vous contrôlez le mode de portabilité en utilisant l'option de configuration portability. Vous définissez ces options en utilisant connect() et setOption().

Les modes de portabilités sont des bits, ils peuvent donc être combinés en utilisant | et supprimés en utilisant ^. Regardez les exemples suivants pour comprendre.

Constantes des modes de portabilité

  • DB_PORTABILITY_ALL

    active les fonctionnalités de portabilité

  • DB_PORTABILITY_DELETE_COUNT

    force à renvoyer le nombre de lignes supprimées. Quelques DBMS ne compte pas les lignes effacées lors de l'exécution de requêtes simples comme DELETE FROM nomtable. Ce mode force ces DBMS à renvoyer le nombre en question en ajoutant WHERE 1=1 à la fin de la requête DELETE.

  • DB_PORTABILITY_ERRORS

    rend les messages d'erreurs de certains pilotes compatibles avec les messages des autres serveurs

    Error Code Re-mappings
    Pilote Description Ancienne constante Nouvelle constante
    mysql, mysqli contraintes de clefs uniques/primaires DB_ERROR_ALREADY_EXISTS DB_ERROR_CONSTRAINT
    mysql, mysqli contraintes non-nul DB_ERROR_CONSTRAINT DB_ERROR_CONSTRAINT_NOT_NULL
    odbc(access) le pilote MS ODBC fait une erreur en rapportant 'no such field' (aucun champ portant ce nom) avec le code 07001, qui signifie 'pas assez de paramètres.' Lorsque cette option est activée, le code est rectifié. DB_ERROR_MISMATCH DB_ERROR_NOSUCHFIELD

  • DB_PORTABILITY_LOWERCASE

    convertit le nom des tables et des champs en minuscules lors de l'utilisation de get*(), fetch*() et tableInfo()

  • DB_PORTABILITY_NONE (défaut)

    Désactive les fonctionnalités de portabilité

  • DB_PORTABILITY_NULL_TO_EMPTY

    convertit les valeurs nulles en chaînes vides pour les fonctions get*() et fetch*(). Cela est requis car Oracle considère les chaînes vides comme étant null, alors que la plupart des autres pilotes font la différence entre vide et null.

  • DB_PORTABILITY_NUMROWS

    active un script qui fait fonctionner numRows() avec Oracle

  • DB_PORTABILITY_RTRIM

    Supprime les espaces blancs de la droite des données renvoyées par get*() et fetch*()

Compatibilité ascendante

Quelques fonctionnalités étaient supportées par l'option optimize qui est maintenant déconseillée. Pour une compatibilité ascendante, lorsque cette option est configurée à portability, les bases de données suivantes ont ces modes de portabilité activés :

  • oci8: DB_PORTABILITY_LOWERCASE et DB_PORTABILITY_DELETE_COUNT

  • fbsql, mysql, mysqli, sqlite : DB_PORTABILITY_DELETE_COUNT

Lorsque l'option optimize est configurée à la valeur performance, le mode de portabilité est changé en DB_PORTABILITY_NONE.

Example

Activer toutes les options de portabilité lors de la connexion

<?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());
}
?>

Utilisation de setOption() pour activer la portabilité pour le passage en minuscules et le nettoyage des espaces blancs à droite

<?php
// On suppose que vous avez un objet $db valide...
$db->setOption('portability',
        
DB_PORTABILITY_LOWERCASE DB_PORTABILITY_RTRIM);
?>

Utilisation de setOption() pour activer toutes les options de portabilité à part le nettoyage des espaces blancs à droite

<?php
// On suppose que vous avez un objet $db valide...
$db->setOption('portability',
        
DB_PORTABILITY_ALL DB_PORTABILITY_RTRIM);
?>
Prépare et exécute automatiquement une requête SQL (Previous) Séquences et auto-incrémentation (Next)
Last updated: Sun, 29 Aug 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.