Manuel Pear
Introduction - Portabilité
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
Tableau 39-1. 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.
Exemple
Remonter 
