mysqlnd_qc_set_is_select

(PECL mysqlnd_qc >= 1.0.0)

mysqlnd_qc_set_is_selectInstala una llamada de retorno que decide si una sentencia es almacenada en caché

Descripción

mysqlnd_qc_set_is_select ( string $callback ) : mixed

Instala una llamada de retorno que decide si una sentencia es almacenada en caché.

Hay varias maneras de indicarle a PELC/mysqlnd_qc que almacene en caché una consulta. Por omisión, PECL/mysqlnd_qc intenta almacenar en caché un a consulta si está habilitado el almacenamiento de todas las consultas o si la cadena de consulta comienza con una sugerencia SQL en particular. El complemento invoca internamente a una función llamada is_select() para averiguarlo. Esta función interna puede ser reemplazada con una llamada de retorno definida por el usuario. Entonces, dicha llamada de retorno definida por el usuario es responsable de decidir si el complemento intentará almacenar en caché una consulta. Debido a que la función interna es reemplazada por la llamada de retorno, ésta obtiene control total. La llamada de retorno es libre de ignorar el ajuste de configuración mysqlnd_qc.cache_by_default y las sugerencias SQL.

La llamada de retorno se invoca para cada sentencia inspeccionada por el complemento. Se le proporciona la cadena de sentencia como parámetro. La llamada de retorno devuelve FALSE si la sentencia no fuera almacenada en caché. Devuelve TRUE para hacer que el complemento intente almacenar en caché el conjunto de resultados de la sentencia, si exite. A una entrada de la caché creada de tal manera se le da el TTL predeterminado establecido con la directiva de configuración de PHP mysqlnd_qc.ttl. Si se usara un TTL diferente, la llamada de retorno devuelve un valor numérico que se usará como TTL.

La función interna is_select es parte de la interfaz interna del gestor de almacenamiento en caché. Por lo tanto, un gestor de almacenamiento definido por el usuario ofrece las mismas capacidades.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de mysqlnd_qc_set_is_select()

<?php
/* llamada de retorno que decide si una consulta es almacenada en caché */
function is_select($query) {
  static 
$patterns = array(
   
/* true - usar lo predeterminado por mysqlnd_qc.ttl */
   
"@SELECT\s+.*\s+FROM\s+test@ismU" => true,
   
/* 3 - usar TTL = 3 segundos */
   
"@SELECT\s+.*\s+FROM\s+news@ismU" => 3
  
);
  
/* comprobar si la consulta coincide con el patrón */
  
foreach ($patterns as $pattern => $ttl) {
    if (
preg_match($pattern$query)) {
      
printf("is_select(%45s): almacenada en caché\n"$query);
      return 
$ttl;
    }
  }
  
printf("is_select(%45s): no almacenada en caché\n"$query);
  return 
false;
}
mysqlnd_qc_set_is_select("is_select");

/* Conectar, crear y rellenar la tabla test */
$mysqli = new mysqli("host""usuario""contraseña""esquema");
$mysqli->query("DROP TABLE IF EXISTS test");
$mysqli->query("CREATE TABLE test(id INT)");
$mysqli->query("INSERT INTO test(id) VALUES (1), (2), (3)");

/* colocada en la caché */
$mysqli->query("SELECT id FROM test WHERE id = 1");
/* coincidencia con la caché */
$mysqli->query("SELECT id FROM test WHERE id = 1");
/* colocada en la caché */
$mysqli->query("SELECT * FROM test");
?>

El resultado de los ejemplos sería:

is_select(                    DROP TABLE IF EXISTS test): no almacenada en caché
is_select(                    CREATE TABLE test(id INT)): no almacenada en caché
is_select(    INSERT INTO test(id) VALUES (1), (2), (3)): no almacenada en caché
is_select(             SELECT id FROM test WHERE id = 1): almacenada en caché
is_select(             SELECT id FROM test WHERE id = 1): almacenada en caché
is_select(                           SELECT * FROM test): almacenada en caché

Ver también