Maison  >  Article  >  base de données  >  A voir absolument ! 10 erreurs MySQL commises par les développeurs PHP

A voir absolument ! 10 erreurs MySQL commises par les développeurs PHP

silencement
silencementavant
2020-01-23 22:18:331792parcourir

A voir absolument ! 10 erreurs MySQL commises par les développeurs PHP

1. Utilisez MyISAM au lieu d'InnoDB

MySQL possède de nombreux moteurs de base de données, et MyISAM et InnoDB sont généralement utilisés.

MyISAM est utilisé par défaut. Mais à moins que vous ne construisiez une base de données très simple ou que vous ne le fassiez simplement de manière expérimentale, ce n’est la plupart du temps pas un bon choix.

MyISAM ne prend pas en charge les contraintes de clé étrangère, ce qui est l'essence même de la garantie de l'intégrité des données. De plus, MyISAM verrouillera la table entière lors de l'ajout ou de la mise à jour de données, ce qui entraînera un gros problème dans les performances d'expansion future.

La solution est simple : utilisez InnoDB. Mais ici, j'essaie généralement MyISAM

2. Utiliser la méthode mysql de PHP

PHP a fourni la bibliothèque de fonctions MySQL depuis le début. De nombreux programmes s'appuient sur mysql_connect, mysql_query, mysql_fetch_assoc, etc., mais le manuel PHP

recommande :

Si la version de MySQL que vous utilisez est postérieure à 4.1.3, il est fortement recommandé d'utiliser l'extension mysqli.

mysqli, ou l'extension avancée de MySQL, présente certains avantages :

possède une interface orientée objet

instructions préparées (instructions préparées, qui peuvent empêcher efficacement l'injection SQL attaques , et peut également améliorer les performances)

Prend en charge plusieurs instructions et transactions

De plus, si vous souhaitez prendre en charge plusieurs bases de données, vous devriez envisager PDO.

3. Ne filtrez pas les entrées des utilisateurs

Cela devrait être : Ne faites jamais confiance aux entrées des utilisateurs. Utilisez PHP back-end pour vérifier et filtrer chaque information d'entrée. Ne faites pas confiance à Javascript. Les instructions SQL comme celles-ci sont facilement attaquées :

$username = $_POST["name"];  
$password = $_POST["password"];  
$sql = "SELECT userid FROM usertable WHERE username='$username'AND password='$password';"; // run query...

Un code comme celui-ci, si l'utilisateur saisit "admin';", est équivalent à ce qui suit :

SELECT userid FROM usertable WHERE username='admin';

De cette façon, l'intrus peut se connecter en tant qu'administrateur sans saisir de mot de passe. 4. N'utilisez pas UTF-8

Les utilisateurs du Royaume-Uni et des États-Unis considèrent rarement les problèmes de langue, ce qui fait que de nombreux produits ne peuvent pas être utilisés ailleurs. . Il existe également certains encodages GBK qui causeront beaucoup de problèmes.

UTF-8 résout de nombreux problèmes d'internationalisation. Bien que PHP6 puisse résoudre ce problème plus parfaitement, cela ne vous empêche pas de définir le jeu de caractères de MySQL sur UTF-8.

5. Utilisez PHP là où SQL doit être utilisé


Si vous êtes nouveau sur MySQL, vous pouvez parfois envisager de l'utiliser en premier pour résoudre des problèmes. Résolu dans une langue que vous connaissez. Cela peut entraîner du gaspillage et de mauvaises performances


. Par exemple : lors du calcul de la moyenne, la méthode native MySQL AVG() n'est pas utilisée. Au lieu de cela, PHP est utilisé pour parcourir toutes les valeurs, puis les accumuler pour calculer la moyenne.

Faites également attention aux boucles PHP dans les requêtes SQL. Il est généralement plus efficace de parcourir PHP une fois que tous les résultats ont été obtenus.

En général, lors du traitement de grandes quantités de données, l'utilisation de méthodes de base de données puissantes peut améliorer l'efficacité.

6. Ne pas optimiser les requêtes


99 % des problèmes de performances PHP sont causés par la base de données. Une mauvaise instruction SQL peut faire tomber l'ensemble de votre programme. lent. L'instruction EXPLAIN de MySQL, Query

Profiler et de nombreux autres outils peuvent vous aider à trouver ces vilains SELECT.

7. Utiliser de mauvais types de données

MySQL fournit une série de types de données tels que des nombres, des chaînes, l'heure, etc. Si vous souhaitez stocker des dates, utilisez le type DATE ou DATETIME. L'utilisation d'entiers ou de chaînes rendra les choses plus compliquées.

Parfois, vous souhaitez utiliser votre propre type de données, par exemple, pour utiliser des chaînes pour stocker des objets PHP sérialisés. Il peut être facile d'ajouter une base de données, mais MySQL deviendra alors lourd et pourrait causer des problèmes à l'avenir.

8. Utilisez *

dans la requête SELECT. N'utilisez pas * pour renvoyer tous les champs de la table, ce qui sera très lent. Il vous suffit de supprimer les champs de données dont vous avez besoin. Si vous devez supprimer tous les champs, votre table devra peut-être être modifiée.

9. Sous-indexation ou surindexation

De manière générale, tous les champs qui apparaissent après WHERE dans l'instruction SELECT doivent être indexés.

Par exemple, disons que notre table d'utilisateurs a un identifiant numérique (clé primaire) et une adresse e-mail. Une fois connecté, MySQL devrait trouver l'ID correspondant par e-mail. Grâce à l'indexation, MySQL peut localiser rapidement les e-mails grâce à des algorithmes de recherche. Sans index, MySQL devrait vérifier chaque enregistrement jusqu'à ce qu'il soit trouvé.

Dans ce cas, vous souhaiterez peut-être ajouter un index à chaque champ, mais la conséquence est que lorsque vous mettez à jour ou ajoutez, l'index sera refait lorsque la quantité de données est importante

. , il y aura des problèmes de performances. Par conséquent, indexez uniquement les champs obligatoires.

10. Ne pas sauvegarder

Cela n'arrive peut-être pas souvent, mais des dommages à la base de données, une panne de disque dur, un arrêt de service, etc., provoqueront un désastre. les données de destruction. Vous devez donc vous assurer de sauvegarder automatiquement vos données ou

ou d'en enregistrer une copie.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer