mysqlnd_ms_query_is_select
(PECL mysqlnd_ms >= 1.0.0)
mysqlnd_ms_query_is_select — Vérifie quel serveur est sélectionné pour l'envoi de la requête
Description
$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.
