mysqlnd_ms_query_is_select

(PECL mysqlnd_ms >= 1.0.0)

mysqlnd_ms_query_is_selectComprueba si se envía la conslta al servidor maestro, al esclavo, o al último servidor MySQL usado

Descripción

mysqlnd_ms_query_is_select ( string $query ) : int

Comprueba si se envía la conslta al servidor maestro, al esclavo, o al último servidor MySQL usado

El mecanismo interno de división de lectura/escritura del complemento se usará para analizar el string de la consulta para recomendar dónde enviar la misma. El mecanismo interno de división de lectura/escritura es muy básico y simple. El complemento recomendará enviar todas las consultas al servidor maestro de replicación MySQL excepto aquellas que comienzan con SELECT, o con una sugerencia SQL que fuerce el envío de la consulta a un servidor esclavo. Debido al algoritmo básico, aunque rápido, el complemento podría proponer ejecutar algunas sentencias de solo lectura tal como SHOW TABLES en el maestro de replicación.

Parámetros

query

El string de la consulta a probar.

Valores devueltos

Un valor de retorno de MYSQLND_MS_QUERY_USE_MASTER indica que la consulta debería enviarse al servidor maestro de replicación MySQL. La función devuelve un valor de MYSQLND_MS_QUERY_USE_SLAVE si la consulta puede ejecutarse en un esclavo debido a que la considera de solo lectura. Un valor de retorno de MYSQLND_MS_QUERY_USE_LAST_USED recomienda la ejecución de la consulta en el último servidor utilizado. Éste puede ser un servidor maestro de replicación MySQL o un servidor esclavo de replicación MySQL.

Si la división de lecutra/escritura está deshabilitada por el ajuste mysqlnd_ms.disable_rw_split, la función siempre devolverá MYSQLND_MS_QUERY_USE_MASTER o MYSQLND_MS_QUERY_USE_LAST_USED.

Ejemplos

Ejemplo #1 Ejemplo de mysqlnd_ms_query_is_select()

<?php
function is_select($consulta)
{
 switch (
mysqlnd_ms_query_is_select($consulta))
 {
  case 
MYSQLND_MS_QUERY_USE_MASTER:
   
printf("'%s' debería ejecutarse en el maestro.\n"$consulta);
   break;
  case 
MYSQLND_MS_QUERY_USE_SLAVE:
   
printf("'%s' debería ejecutarse en un esclavo.\n"$consulta);
   break;
  case 
MYSQLND_MS_QUERY_USE_LAST_USED:
   
printf("'%s' debería ejecutarse en el servidor que ejecutó la consulta anterior\n"$consulta);
   break;
  default:
   
printf("No hay sugerencias donde ejecutar '%s', se recomienda volver al maestro\n"$consulta);
   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");
?>

El resultado del ejemplo sería:

INSERT INTO test(id) VALUES (1) debería ejecutarse en el maestro.
SELECT 1 FROM DUAL debería ejecutarse en un esclavo.
/*ms=last_used*/SELECT 2 FROM DUAL debería ejecutarse en el servidor que ejecutó la consulta anterior