mysqlnd_qc
PHP Manual

Constantes pré-définies

Ces constantes sont définies par cette extension, et ne sont disponibles que si cette extension a été compilée avec PHP, ou bien chargée au moment de l'exécution.

Astuces SQL

Exemple #1 Utilisation des constantes d'astuces SQL

La mise en cache de requêtes est contrôlée par les astuces SQL. Les astuces SQL sont utilisées pour activer et désactiver la mise en cache des requêtes. Elles peuvent être utilisées pour définir le TTL (la durée de vie dans le cache) d'une requête.

Les astuces SQL reconnues par la mise en cache de requêtes peuvent être manuellement modifiées au moment de la compilation. Ceci permet d'utiliser mysqlnd_qc dans les environnements pour lesquels les astuces SQL par défaut sont déjà utilisées et interprétées par d'autres systèmes. Toutefois, il est recommandé d'utiliser les constantes relatives aux astuces SQL au lieu d'ajouter manuellement les astuces SQL dans la chaîne de la requête.

<?php
/* Utilisation des constantes pour une portabilité maximale */
$query "/*" MYSQLND_QC_ENABLE_SWITCH "*/SELECT id FROM test";

/* Valide mais moins portable : TTL par défaut */
$query "/*qc=on*/SELECT id FROM test";

/* Valide mais moins portable : TTL par requête */
$query "/*qc=on*//*qc_ttl=5*/SELECT id FROM test";

printf("MYSQLND_QC_ENABLE_SWITCH: %s\n"MYSQLND_QC_ENABLE_SWITCH);
printf("MYSQLND_QC_DISABLE_SWITCH: %s\n"MYSQLND_QC_DISABLE_SWITCH);
printf("MYSQLND_QC_TTL_SWITCH: %s\n"MYSQLND_QC_TTL_SWITCH);
?>

Les exemples ci-dessus vont afficher :

MYSQLND_QC_ENABLE_SWITCH: qc=on
MYSQLND_QC_DISABLE_SWITCH: qc=off
MYSQLND_QC_TTL_SWITCH: qc_ttl=

MYSQLND_QC_ENABLE_SWITCH (string)
Astuce SQL utilisée pour activer la mise en cache d'une requête.
MYSQLND_QC_DISABLE_SWITCH (string)
Astuce SQL utilisée pour désactiver la mise en cache d'une requête si mysqlnd_qc.cache_by_default = 1.
MYSQLND_QC_TTL_SWITCH (string)
Astuce SQL utilisée pour définir le TTL (la durée de vie dans le cache) d'un jeu de résultats.
MYSQLND_QC_SERVER_ID_SWITCH (string)
Cette astuce SQL ne doit en généralement pas être utilisée. Elle est nécessaire à PECL/mysqlnd_ms pour grouper les entrées du cache pour une seule requête et provient de différentes connexions physiques. Si l'astuce est utilisée, la configuration de la connexion comme l'utilisateur, le nom d'hôte et le jeu de caractères ne sera pas prise en considération pour générer la clé du cache de la requête. A la place de cela, la valeur fournie et la chaîne de requête seront utilisées comme entrée dans la fonction de hachage qui génère la clé. PECL/mysqlnd_ms peut, si demandé, mettre en cache les résultats depuis des serveurs esclaves de réplication MySQL. En raison du fait que le cache peut contenir plusieurs connexions à l'esclave, la clé du cache ne doit pas être formée en utilisant le nom de l'utilisateur, le nom d'hôte ou tout autre configuration qui peuvent varier entre les connexions aux esclaves. Au lieu de ça, PECL/mysqlnd_ms fournit un identifiant qui se réfère au groupe de connexions esclaves qui doivent être activées pour partager les entrées du cache, peu importe la connexion esclave physique utilisée pour générer l'entrée du cache. L'utilisation de cette fonctionnalité en dehors de PECL/mysqlnd_ms n'est pas recommandée.

En relation avec mysqlnd_qc_set_cache_condition()

Exemple #2 Exemple avec mysqlnd_qc_set_cache_condition()

La fonction mysqlnd_qc_set_cache_condition() autorise la définition de condition pour la mise en cache automatique des requêtes qui ne commencent pas par des astuces SQL, nécessaire pour l'activation manuelle de la mise en cache.

<?php
/* Met en cache tous les accès aux tables avec le "new%" dans le schéma/base de données "db_example" pour 1 seconde */
if (!mysqlnd_qc_set_cache_condition(MYSQLND_QC_CONDITION_META_SCHEMA_PATTERN"db_example.new%"1)) {
  die(
"Échec de la définition de la condition de mise en cache !");
}

$mysqli = new mysqli("host""user""password""db_example""port");
/* Mise en cache alors qu'aucune astuce SQL n'est fournie */
$mysqli->query("SELECT id, title FROM news");

$pdo_mysql = new PDO("mysql:host=host;dbname=db_example;port=port""user""password");
/* Non mise en cache : aucune astuce SQL, et le masque ne correspond pas */
$pdo_mysql->query("SELECT id, title FROM latest_news");
/* Mise en cache : TTL de 1 seconde, le masque correspond */
$pdo_mysql->query("SELECT id, title FROM news");
?>

MYSQLND_QC_CONDITION_META_SCHEMA_PATTERN (int)
Utilisé comme paramètre de la fonction mysqlnd_qc_set_cache_condition() pour définir les conditions pour le schéma de mise en cache automatique.


mysqlnd_qc
PHP Manual