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
) : intVé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.
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.
Version en cache
25/11/2024 20:52:21 Cette version de la page est en cache (à la date du 25/11/2024 20:52:21) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-mysqlnd-ms-query-is-select.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.