7
votes

Différences de syntaxe entre MySQL, SQLite et PGSQL

Je crée une petite bibliothèque ActiveCord à l'aide de PDO et je prévois de soutenir mysql , sqlite et pgsql .

Ma question est de savoir comment je peux être sûr que la chaîne de requête fonctionne avec tous les adaptateurs? Il y aura surtout des déclarations crud avec certaines jointures, etc. Y a-t-il une norme que je peux suivre cela fonctionne pour tous ceux-ci?

merci / Tobias

EDIT: Merci pour toutes vos réponses, mais ma question était davantage sur la syntaxe SQL ' Syntaxe ' entre eux.


3 commentaires

Bien sur. Vous pouvez toujours avoir la possibilité de lier vos mains et de faire une sqlite misérable de postgre puissante.


Le problème de ce type d'approche est que l'application résultante fonctionnera également lentement sur toutes les plates-formes - surtout s'il s'agit d'une application non triviale. Je préférerais essayer de faire l'abstraction sur la couche d'entreprise et d'exploitez les fonctionnalités spécifiques du SGBD où que vous puissiez dans la couche d'accès aux données.


@a_horse_with_no_name: Pour des trucs comme celui-ci, je répondais toujours, montrez-moi un problème de performance, puis j'utiliserais un commutateur pour exécuter une requête régulière. S'inquiéter des performances en raison de la couche d'abstraction de la base de données me semble être une optimisation prématurée; Et même lorsque vous utilisez une couche d'abstraction, j'ai toujours la possibilité d'exécuter des requêtes régulières.


3 Réponses :


0
votes

ici Vous avez une simple introduction à zend_db_adapter - i Pensez que vous voulez quelque chose de similaire (je l'ai posté simplement comme exemple pour voir comment les autres résolvent le problème que vous avez)


0 commentaires

0
votes

Mon choix pour ce type de problèmes serait Adodb . Bien que je ne l'ai jamais utilisé avec PostgreSQL, cela vient d'enregistrer ma santé mentale dans un projet qui est arrivé à être né avec MySQL puis migré vers SQL Server, à SQLite et à SQL Server.


0 commentaires

2
votes

Si vous souhaitez écrire votre propre couche de DB, je vous suggère:

  1. Utilisez des espaces réservés, si vous n'êtes pas déjà. Ils ajoutent aussi de la sécurité.
  2. Utilisez BindParam / BindValue avec type de valeur (par exemple, les booléens n'existent pas dans SQLite mais travaillent si elles sont liées à PARAM_BOOL) ...
  3. Utilisez des procédures stockées à partir de MySQL, créez des noms correspondants dans PostgreSQL et définissez-les dans SQLite avec SQLITECREATREAGEGATEGRÉE / SQLITECREATEFunction.
  4. Tous les paramètres vérifient-ils dans PHP, car SQLite ne fera aucun (par exemple Valider les variables de date) ...
  5. Utilisez InnoDB pour MySQL pour obtenir des transactions.

    Remarque: en prenant en charge ces RDBM de manière très vaste, vous rétrograchez la base de données à un magasin de données. N'oubliez pas que SQLite est très limité. Il ne dispose pas de types de données natifs d'enregistrement du numéro / de la chaîne. Par exemple. Il manque la manutention et les intervalles de la date, et ainsi de suite. Les trois bases de données prennent en charge les transactions, qui sont essentielles à l'intégrité des données lorsque l'intégrité est maintenue en dehors de la DB.

    EDIT: Suppression de mention des déclencheurs MySQL, disponibles pour 5.0.


1 commentaires

Autant que je préfère Postgres: MySQL fait ont des déclencheurs. Mais les clés étrangères sont beaucoup mieux adaptées à l'intégrité des données.