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)
MYSQLND_QC_DISABLE_SWITCH
(string)
MYSQLND_QC_TTL_SWITCH
(string)
MYSQLND_QC_SERVER_ID_SWITCH
(string)
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)