web-dev-qa-db-fra.com

Puis-je utiliser les fonctions SQL PHP au lieu de $ wpdb?

Je ne connaissais pas WordPress et je me demandais pourquoi, dans l'API WordPress, vous invitait-il à utiliser des fonctions telles que prepare(), insert(), get_col(), get_row(), query(), etc. Quand, techniquement, je peux utiliser les fonctions PHP-SQL intégrées telles que mysqli_query() , mysqli_fetch_assoc(), etc.

Quels sont exactement les avantages d'utiliser les fonctions SQL $wpdb pour exécuter des requêtes?

5
blee908

Il y a plusieurs raisons différentes.

1. Séparation des préoccupations

Fondamentalement, votre code logique (c'est-à-dire votre plugin ou votre thème) ne devrait pas avoir besoin de connaître la base de données. Du tout. Vraiment.

L'objet $wpdb est la couche d'accès à la base de données globale. Vous devez l'utiliser pour tous les accès à la base de données. Si vous devez exécuter une requête personnalisée (supposons que vous ayez une table personnalisée quelque part), vous devez utiliser $wpdb->prepare() et $wpdb->query() pour préparer vos requêtes et extraire les données de la base de données.

2. sécurité

Il est très facile d'oublier de nettoyer une requête et d'ouvrir votre site à une sorte d'attaque par injection SQL. Utiliser les méthodes d'assainissement intégrées de WordPress est un moyen de se protéger contre cela. Ce n'est pas parfait (vous pouvez toujours écrire une très mauvaise requête) mais cela aide certainement.

3. la performance

Les requêtes intégrées à l'API WordPress ont été traitées par plusieurs développeurs et modifiées pour fonctionner avec la plus petite empreinte mémoire possible et pour revenir le plus rapidement possible. En outre, certains de ces appels d'API sont en cache automatique. Vous pouvez donc "interroger" les données non modifiées et déjà en mémoire. Cela représente un avantage considérable en termes de performances par rapport à un appel SQL direct.

Et avec chaque nouvelle version de WordPress, nous apportons des modifications pour rendre les choses plus rapides et plus agiles.

4. Flexibilité et stabilité

La base de données n'est pas une construction fixe. Le schéma de la table peutet serachanger. Le codage en dur des requêtes sur des objets WordPress dans votre propre code est un cauchemar inflexible en matière de maintenance. Lorsqu'une nouvelle version de WP _ tombe, vous devez réécrire vos requêtes à nouveau ... pour vous ouvrir à nouveau aux vulnérabilités potentielles (n ° 2) ou avoir un impact négatif sur les performances de votre site (n ° 3).

Le résultat final

Tout PHP est toujours disponible. Vous pouvez établir des connexions directes avec la base de données dont vous avez besoin et exécuter toutes les requêtes souhaitées. Mais WordPress a déjà (dans la majorité des cas) fait le travail lourd et résumé ces appels pour vous.

L'avantage d'utiliser $wpdb est qu'il est déjà présent, qu'il est géré par plusieurs développeurs et qu'il est bien documenté. Vous n'avez pas à réinventer la roue. Et vous savez, si WordPress change, il changera pour vous.

9
EAMann

Oui, vous pouvez utiliser les fonctions SQL de PHP dans WordPress. WordPress est écrit en PHP, donc toutes les fonctions PHP sont disponibles dans les plugins.

Pour répondre à votre deuxième question, les principaux avantages de wpdb sont la commodité et la sécurité. La bibliothèque wpdb est une couche d'abstraction de base de données qui fournit une tonne de fonctions utiles. Par exemple, lorsque vous utilisez les fonctions wpdb-> insert () et wpdb-> update (), vous n'écrivez pas de code SQL et vous n'avez pas à craindre d'échapper au contenu des variables ( la documentation wpdb de wpdb -> update () dit qu'ils ne doivent pas être échappés).

Update : Il est à noter que wpdb n'échappe pas aux requêtes SQL dans des fonctions telles que select(). Lisez la section DB de l'article Data Validation pour plus d'informations.

Pour élaborer sur la réponse de fdsa, wpdb a également une mise en cache intégrée pour l'optimisation des requêtes.

wpdb fournit également des variables de commodité pour les noms des tables de base de données. Ceci est extrêmement utile lors du codage pour un environnement réseau/multisite.

Pour référence: Référence de la classe/wpdb sur les documents officiels.