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
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