MDB2 se desconecta y se olvida el conjunto de caracteres de la configuración al volver a conectar

StackOverflow https://stackoverflow.com/questions/81061

  •  09-06-2019
  •  | 
  •  

Pregunta

Recientemente hemos depurado un extraño bug.Se encontró una solución, pero la solución no es totalmente satisfactoria.

Utilizamos IntSmarty para localizar nuestro sitio web, y almacenar las cadenas localizadas en una base de datos utilizando nuestro propio envoltorio.En su destructor, IntSmarty guarda los nuevos cadenas que podría tener, lo que resulta en una base de datos llamada.

Utilizamos una instancia Singleton de MDB2 para hacer consultas en MySQL, y después de la conexión se utilizó el SetCharset()-función para cambiar el conjunto de caracteres a UTF-8.Hemos encontrado que las cadenas que fueron salvados por IntSmarty fueron interpretadas como ISO-8859-1 cuando el final se inserta fueron hechas.Hemos visto de cerca el registro de consultas, y se encontró que la conexión de MySQL se desconecta antes de IntSmarty del destructor tienes.Es entonces tengo restablecido, pero no "SET NAMES utf8" consulta fue emitida en la nueva conexión.Esto dio como resultado que los salvos cadenas consiguió interpretado como ISO-8859-1 por MySQL.

Parece que no hay opciones que establecen el conjunto de caracteres por defecto en MDB2.Nuestra solución a este problema es cambiar el servidor de MySQL, configuración, mediante la adición de

init-connect='SET NAMES utf8'

a mi.cnf.Esto sólo resuelve el problema de que nuestro conjunto de caracteres es siempre el mismo.

Así que, ¿hay alguna manera de que yo pueda evitar la conexión de ser derribado antes de que todas las consultas se han ejecutado?Se puede forzar la MDB2 instancia para ser destruido después de todo lo demás?

Encender las conexiones persistentes funciona, pero no es una respuesta deseada.

¿Fue útil?

Solución

Desde el PHP5 documentación:

El método destructor se llamará tan pronto como todas las referencias a un objeto en particular se quitan o cuando el objeto está explícitamente destruido o en cualquier orden en la secuencia de cierre.

Documentación de PHP

(el énfasis es mío)

Lo que probablemente suceda es que el script no explícitamente destruir el objeto, y así, cuando PHP se obtiene al final de la secuencia de comandos se inicia la limpieza de las cosas en el orden en que se siente-que en su caso, es el cierre de la base de datos de enlace de la primera.

Si usted explícitamente destruir la IntSmarty objeto antes de la final de la secuencia de comandos, que debería resolver su problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top