MySQL/API
L' (API) MySQL permet aux applications d’interagir avec les bases de données.
Optimisation.
Appels API.
Connexions persistantes.
En utilisant les connexions persistantes, plusieurs requêtes peuvent être exécutées sans reconnexion. C'est un gain de temps pour l'utilisateur, mais le serveur doit y allouer une partie de sa RAM pendant tout ce temps, ce qui peut le saturer, surtout quand tous ses sites le font.
Mémoire libre.
Certaines requêtes enregistrent une ligne dans une variable. Cela peut donc avoir du sens de libérer cette mémoire un peu avant la fin du script, plutôt qu'à la toute fin.
Recherche de ligne.
La plupart des APIs proposent deux types de recherches de ligne : en tableau (associatif ou pas) ou en objet.
Assigner les lignes dans un objet est plus lent, alors que le tableau non associatif est le plus rapide (et c'est le mieux si on ne prend qu'un seul champ par enregistrement).
API vs SQL.
Généralement, les APIs ont des méthodes optimisées qui créent des commandes SQL et les envoient au serveur MySQL.
Réduire les communications client/serveur.
CREATE ... SELECT, INSERT ... SELECT.
Lors de création de nouvelle table depuis une existante, codice_1 peut être utilisé. 
Pour remplir une table existante, c'est codice_2 ou codice_3.
INSERT DELAYED.
Certains scripts n'ont pas besoin de vérifier si les insertions se sont bien déroulées. 
Dans ce cas, faire appel à codice_4 pour que le serveur n'attende pas.
REPLACE.
Lors d'un codice_5 précédé d'un codice_6, le serveur reçoit deux commandes SQL. 
En revanche, avec codice_7 il n'en reçoit qu'une.
De plus, codice_8 est possible.
Autres techniques.
Stocker les données dans des cookies.
Parfois, des données de session sont stockées dans la base. 
Cela nécessite un codice_9 et un codice_10 à charge chargement de page. 
Cela peut être évité avec les cookies (même si l'utilisateur peut refuser leur utilisation, ou bien lire leur contenu). Il faut éviter d'y stocker des mots de passe et leur attribuer un bref temps de vie sous peine de compromettre la vie privée de l'utilisateur. 
Autre solution :
 SELECT FROM `access` WHERE `id`=id_cookie AND `timestamp`>=CURRENT_TIMESTAMP() - login_lifetime
Créer du contenu statique.
Quand un utilisateur lit du contenu dynamique (d'une base), un document HTML est généré. 
Souvent, cette page ne contient pas de variable mais du contenu inséré une seule fois, sans mise à jour. 
D'où l'idée de stocker des pages HTML statiques, supprimée puis regénérées lors des mises à jour de la base.
PHP.
Pilotes.
PHP possède les pilotes officiels suivant pour MySQL :
Les fonctions de ces pilotes utilisent l'API C. Elles peuvent utiliser MySQL Client Library ou mysqlnd, comme pilotes natifs pour PHP.
Parfois, activer mysql et mysqli peut causer des problèmes. Il est donc préférable d'en activer qu'un.
De plus, PHP possède une extension ODBC qui fonctionne avec MySQL.
PEAR est un framework PHP important qui prend en charge MySQL.
register_globals et $_REQUEST.
PHP a des variables d'environnement appelées codice_16. Depuis PHP 4.2, elles sont False par défaut, et ne doivent pas être activées. Dans PHP 5.3 la fonctionnalité est devenue obsolète et supprimée en PHP 5.4.0.
Cependant, si la version de PHP utilisée accepte register_globals, on peut vérifier s'il est activé lancer codice_17. Si c'est le cas, codice_18 ne pourra pas le changer. Il y a deux façons de le faire :
 php_flag register_globals off
En fait si register_globals est True, un utilisateur peut arbitrairement ajouter des variables à votre script avec ce genre de commande :
 your_script.php?new_variable=new_value
Ne jamais utiliser le tableau codice_20, lui préférer :
Cet ordre est celui suivi par PHP, mais il peut être modifié par variables_order.
Cela signifie que si votre script définit une variable serveur appelée "userid" et que l'application tente de la lire dans codice_20, l'utilisateur peut prévenir en ajoutant une variable à la requête.