Fonctions Mysqlnd_ms
PHP Manual

mysqlnd_ms_query_is_select

(PECL mysqlnd_ms >= 1.0.0)

mysqlnd_ms_query_is_selectVérifie quel serveur est sélectionné pour l'envoi de la requête

Description

int mysqlnd_ms_query_is_select ( string $query )

Vérifie si l'on doit envoyer la requête au maître, à l'esclave ou bien au dernier serveur MySQL utilisé.

Les plugins internes de lectures/écritures seront utilisés pour analyser la requête afin de rendre une recommandation quant à la destination de la requête. Ce mécanisme est très simple. Le plugin recommandera d'envoyer toutes les requêtes au serveur MySQL maître de réplication sauf les requêtes qui commencent par SELECT, ou commencent avec une astuce SQL qui force l'envoie vers un serveur esclave. En raison de ce mécanisme simple mais rapide, le plugin peut proposer d'exécuter des requêtes en lecture seule comme SHOW TABLES sur le serveur de réplication.

Liste de paramètres

query

La requête à tester.

Valeurs de retour

Une valeur de retour MYSQLND_MS_QUERY_USE_MASTER indique que la requête doit être envoyée au serveur MySQL maître de réplication. La fonction retournera une valeur de MYSQLND_MS_QUERY_USE_SLAVE si la requête peut être exécutée sur un esclave en raison du fait qu'elle ait été considérée comme exécutable en lecture seule. Une valeur de MYSQLND_MS_QUERY_USE_LAST_USED est retournée pour recommander d'exécuter la requête sur le dernier serveur utilisé. Ce peut être soit le serveur MySQL maître de réplication, soit un serveur MySQL esclave de réplication.

Si la séparation des lectures et des écritures a été désactivée avec l'option de configuration mysqlnd_ms.disable_rw_split, la fonction retournera toujours MYSQLND_MS_QUERY_USE_MASTER ou MYSQLND_MS_QUERY_USE_LAST_USED.

Exemples

Exemple #1 Exemple avec mysqlnd_ms_query_is_select()

<?php
function is_select($query)
{
 switch (
mysqlnd_ms_query_is_select($query))
 {
  case 
MYSQLND_MS_QUERY_USE_MASTER:
   
printf("'%s' devrait être exécutée sur le maître.\n"$query);
   break;
  case 
MYSQLND_MS_QUERY_USE_SLAVE:
   
printf("'%s' devrait être exécutée sur un esclabe.\n"$query);
   break;
  case 
MYSQLND_MS_QUERY_USE_LAST_USED:
   
printf("'%s' devrait être exécutée sur le serveur qui a exécuté la précédente requête.\n"$query);
   break;
  default:
   
printf("Aucune suggestion d'exécution de '%s', par défaut, le maître est recommandé.\n"$query);
   break;
 }
}

is_select("INSERT INTO test(id) VALUES (1)");
is_select("SELECT 1 FROM DUAL");
is_select("/*" MYSQLND_MS_LAST_USED_SWITCH "*/SELECT 2 FROM DUAL");
?>

L'exemple ci-dessus va afficher :

INSERT INTO test(id) VALUES (1) devrait être exécutée sur le maître.
SELECT 1 FROM DUAL should be run on a slave.
/*ms=last_used*/SELECT 2 FROM DUAL devrait être exécutée sur le serveur qui a exécuté la précédente requête.

Voir aussi


Fonctions Mysqlnd_ms
PHP Manual