'username_exists' todavía devuelve un ID incluso después de eliminar el registro de la base de datos?

4

¿Hay algún tipo de caché de consulta MySQL activado de forma predeterminada o algo así? Estoy tratando de trabajar en un script de importación de usuario y estoy viendo algunos resultados extraños de la función username_exists después de eliminar los registros de la tabla wp_users . Después de eliminar los registros cuando llamo a username_exists , Wordpress sigue devolviendo la ID del usuario eliminado en lugar de a false . Impar. ¿Qué me estoy perdiendo?

    
pregunta Adam Christianson 29.05.2016 - 01:29

2 respuestas

2

Por defecto, WordPress usa $wp_object_cache que es una instancia de WP_Object_Cache para ahorrar en viajes a la base de datos.

Rastrear la función username_exists() , notará que get_user_by() utiliza WP_User::get_data_by() que devuelve datos de usuario de $wp_object_cache inmediatamente sin verificar si ese usuario existe en la base de datos. Tenga en cuenta que $wp_object_cache se almacena en la memoria.

Significa que si eliminó un registro de usuario directamente en su base de datos sin limpiar la memoria caché del usuario, los datos del usuario todavía están disponibles. Ese es el problema.

Entonces, ¿qué estás perdiendo?

  1. Falta en eliminar usuario de la manera correcta .

  2. Falta en limpiar caché de usuario .

respondido por el MinhTri 30.05.2016 - 17:18
1

El almacenamiento en caché puede estar en cualquier lugar, comenzando con el almacenamiento en caché de solicitud en el lado de los componentes de mysql (es poco probable que afecte en este caso), y el almacenamiento en caché de objetos en el lado de wordpress.

Probablemente esté haciendo algo mal en su código, pero siempre es mejor usar la API (o administrador de wordpress como una interfaz) para eliminar cosas y luego tratar de eliminarlas accediendo directamente a la base de datos. No es solo el almacenamiento en caché lo que le puede dar problemas, sino también la meta del usuario y otras configuraciones que no va a tener en cuenta.

    
respondido por el Mark Kaplun 29.05.2016 - 07:37

Lea otras preguntas en las etiquetas