Cet article vous présentera les 11 erreurs MySQL les plus courantes commises par les programmeurs PHP. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.
Pour la plupart des applications Web, la base de données est un élément très basique. Si vous utilisez PHP, vous utilisez probablement également MySQL, un membre important de la famille LAMP.
Pour de nombreux novices, l'utilisation de PHP permet d'écrire facilement du code avec des fonctions spécifiques en quelques heures seulement. Cependant, construire une base de données stable et fiable nécessite du temps et des compétences. Vous trouverez ci-dessous les 11 pires erreurs liées à MySQL que j'ai jamais commises (dont certaines se reflètent également dans l'utilisation d'autres langages/bases de données). . .
1. Utilisez MyISAM au lieu d'InnoDB
MySQL possède de nombreux moteurs de base de données, mais ceux que vous êtes le plus susceptible de rencontrer sont MyISAM et InnoDB.
MySQL utilise MyISAM par défaut. Cependant, c'est un mauvais choix dans de nombreux cas, à moins que vous ne créiez une base de données très simple ou expérimentale. Les contraintes ou transactions de clé étrangère sont très importantes pour l'intégrité des données, mais MyISAM ne les prend pas en charge. De plus, lorsqu'un enregistrement est inséré ou mis à jour, l'intégralité de la table de données est verrouillée, ce qui produira une très mauvaise efficacité opérationnelle lorsque l'utilisation augmentera.
La conclusion est simple : utilisez InnoDB.
2. Utilisez la fonction mysql de PHP
PHP fournit des fonctions de bibliothèque MySQL depuis le jour de sa création (ou presque, cela ne fait aucune différence). De nombreuses applications utilisent encore des fonctions comme mysql_connect, mysql_query, mysql_fetch_assoc, etc., bien que le manuel PHP indique :
Si vous utilisez MySQL v4.1.3 ou une version plus récente, il est fortement recommandé d'utiliser l'extension mysqli.
mysqli (une extension améliorée de MySQL) présente les avantages suivants :
Interface orientée objet en option
expressions préparées, qui aident à prévenir les attaques par injection SQL, peuvent également améliorer performances
Prend en charge davantage d'expressions et de traitement de transactions
De plus, si vous souhaitez prendre en charge plusieurs systèmes de bases de données, vous pouvez également envisager PDO.
3. Ne pas gérer les entrées des utilisateurs
Cela peut être dit comme ceci #1 : Ne faites jamais confiance aux entrées des utilisateurs. Validez chaque chaîne avec PHP côté serveur, ne comptez pas sur JavaScript. L'attaque par injection SQL la plus simple utilisera le code suivant :
$username = $_POST["name"]; $password = $_POST["password"]; '$username' AND password='$password';"; // exécuter la requête...
Tant que vous entrez "admin';--" dans le champ du nom d'utilisateur, vous serez piraté en conséquence. L'instruction SQL est la suivante :
SELECT userid FROM usertable WHERE username='admin';
Les pirates rusés peuvent se connecter en tant qu'administrateur, et ils n'ont pas besoin de connaître le mot de passe car le Le champ du mot de passe est commenté.
4. UTF-8 n'est pas utilisé
Nous, aux États-Unis, au Royaume-Uni et en Australie, considérons rarement des langues autres que l'anglais. Nous terminons fièrement nos « chefs-d'œuvre » pour constater qu'ils ne fonctionnent pas bien ailleurs.
UTF-8 résout de nombreux problèmes d'internationalisation. Bien qu'il ne soit pas bien supporté avant PHP v6.0, cela ne vous empêche pas de définir le jeu de caractères MySQL sur UTF-8.
5. Préférez PHP à SQL
Si vous êtes exposé à MySQL depuis peu de temps, vous aurez tendance à utiliser le langage que vous maîtrisez déjà pour résoudre des problèmes, ce qui conduira à écrire du code redondant et inefficace. Par exemple, vous n'utiliseriez pas la fonction AVG() fournie avec MySQL, mais vous additionneriez d'abord les valeurs du jeu d'enregistrements, puis utiliseriez une boucle PHP pour calculer la moyenne.
Veuillez également faire attention à la requête SQL dans la boucle PHP. De manière générale, il est plus efficace d’exécuter une requête que de parcourir les résultats.
Alors, veuillez profiter du système de base de données lors de l'analyse des données. Connaître certains SQL sera très utile.
6. Ne pas optimiser les requêtes de base de données
99 % des problèmes de performances PHP sont causés par la base de données. Une seule mauvaise requête SQL peut ruiner votre application Web. L'instruction EXPLAIN de MySQL, Query Profiler et de nombreux autres outils vous aideront à trouver ces mauvais SELECT.
7. Impossibilité d'utiliser correctement les types de données
MySQL fournit des types de données tels que numériques, chaînes et dates. Si vous souhaitez stocker une heure, utilisez le type DATE ou DATETIME. Si vous utilisez le type INTEGER ou STRING à ce stade, cela rendra la requête SQL très compliquée, à condition que vous puissiez utiliser INTEGER ou STRING pour définir ce type.
De nombreuses personnes ont tendance à personnaliser le format de certaines données sans autorisation, par exemple en utilisant une chaîne pour stocker des objets PHP sérialisés. Cela peut rendre la base de données plus facile à gérer, mais cela fait de MySQL un mauvais magasin de données et est susceptible de provoquer des pannes ultérieurement.
8. Utilisez * dans les requêtes
Ne jamais utiliser * pour renvoyer des données pour toutes les colonnes d'une table de données. C'est de la paresse : vous devez extraire les données dont vous avez besoin. Même si vous avez besoin de tous les champs, votre tableau de données changera inévitablement.
9. Ne pas utiliser d'index ou en abuser.
Le principe général est le suivant : tout champ représenté par une clause Where dans l'instruction select doit utiliser un index.
Par exemple, supposons que nous ayons une table utilisateur, comprenant un identifiant numérique (clé primaire) et une adresse e-mail. Lors de la connexion, MySQL doit rechercher l'ID correct sur la base d'un e-mail. Si un index est utilisé (ici, email), alors MySQL peut utiliser un algorithme de recherche plus rapide pour localiser l'e-mail, même instantanément. Sinon, MySQL ne peut vérifier chaque enregistrement que de manière séquentielle jusqu'à ce qu'il trouve la bonne adresse e-mail.
Certaines personnes ajoutent des index à chaque champ Malheureusement, ces index doivent être régénérés après l'exécution de INSERT ou UPDATE, ce qui affectera les performances. Alors, ajoutez des index uniquement lorsque cela est nécessaire.
10. J'ai oublié de sauvegarder
Bien que ce soit rare, il existe toujours un risque de crash de la base de données. Les disques durs peuvent être corrompus, les serveurs peuvent tomber en panne et les fournisseurs d'hébergement Web peuvent faire faillite. La perte de vos données MySQL serait catastrophique, alors assurez-vous d'avoir mis en place des sauvegardes automatisées ou des copies !
11. Erreur bonus : n'envisagez pas d'utiliser d'autres bases de données
Pour les développeurs PHP, MySQL est peut-être le système de base de données le plus utilisé, mais ce n'est pas le seul. choisir. PostgreSQL et Firebird sont les concurrents les plus sérieux : tous deux sont open source et aucun n'a été racheté par une entreprise. Microsoft propose SQL Server Express et Oracle propose 10g Express, qui sont tous deux des versions gratuites de bases de données d'entreprise. Parfois, pour une application Web plus petite ou une application intégrée, SQLite peut être une alternative viable.
Apprentissage recommandé : Tutoriel vidéo PHP
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!