Cuando ejecuto una consulta sql usando los wrappers de ZF, todos los valores numéricos vuelven como cadenas. ¿Qué debo cambiar para que los valores vuelvan en el mismo tipo de datos que en el DB?obteniendo un entero de la base de datos utilizando Zend Framework devuelve el valor como una cadena
obteniendo un entero de la base de datos utilizando Zend Framework devuelve el valor como una cadena
Respuesta
Implementé una gran parte del código Zend_Db
en Zend Framework.
Como han dicho otros, la razón por la cual Zend_Db
devuelve cadenas en lugar de enteros o flotantes nativos de PHP es que las extensiones de la base de datos de PHP devuelven cadenas. Y la razón es que no puede haber un tipo de PHP nativo para representar cierto tipo de base de datos. Por ejemplo, BIGINT
de MySQL es un entero de 64 bits con signo. De forma predeterminada, el tipo PHP int
está limitado a valores de 32 bits, por lo que si obtiene datos de la base de datos y los convierte implícitamente a int
, algunos valores pueden verse truncados. Hay varios casos similares más, para float
y fechas, etc.
El uso de la representación de cadenas para todos los tipos de datos es la mejor manera de mantenerse simple y coherente, evitar la pérdida de datos y evitar escribir muchos proveedores. código específico de casos especiales para hacer un mapeo de tipos de datos. Ese código adicional también implicaría una penalización de rendimiento.
Así que si tiene casos específicos donde necesita que los resultados de la base de datos se asignen a tipos de datos nativos de PHP, debe implementarlo usted mismo en el código de la aplicación (por ejemplo, en una clase personalizada Zend_Db_Table_Row
).
Las bases de datos suelen devolver conjuntos de resultados como texto. A menos que su adaptador db convierta cosas para usted (y sonidos como el suyo no), todos los valores regresarán como cadenas de caracteres: fechas, enumeraciones, etc., así como enteros.
Si se trata de un pequeño número de tablas con solo unos pocos campos enteros, simplemente conviértelos a mano. Si se trata de una situación ligeramente más compleja, puede recorrer las columnas utilizando las definiciones de la base de datos (consulte sqlite_fetch_column_types()
, etc.). Si su situación es más compleja de lo que parece razonable para estas soluciones, considere cambiar a un marco más funcional.
Parece que esto ha sido solicitado en el pasado pero aún no se ha implementado. #ZF-300 se comentó por última vez el 9 Ene 09.
Quizás podría compartir por qué quiere realizar el encasillamiento y le podemos ayudar de otra manera? PHP es bastante indulgente cuando se trata de tipos de datos variables ...
Para un ejemplo del uso de una costumbre Zend_Db_Table_Row
para obtener los tipos de datos correctos, como se sugiere Bill Karwin, echar un vistazo a la clase aquí: http://www.zfsnippets.com/snippets/view/id/70
Puede ser implementado en su modelo como:
class YourTableName extends Zend_Db_Table_Abstract
{
protected $_name = 'your_table_name';
protected $_rowClass = 'Model_Row_Abstract';
}
Es posible que desee cambiar el tipo de datos Model_Row_Abstract
para tinyint
a bool
si lo usa estrictamente para mantener valores booleanos.
- 1. insertar nulo como valor entero en una base de datos
- 2. Obteniendo solo una fila de MySQL usando Zend DB framework
- 3. ¿Tiene algún inconveniente para almacenar un número entero como una cadena en una base de datos?
- 4. Obtener datos de la publicación, Zend Framework
- 5. Transacciones de base de datos en Zend Framework: ¿Están aisladas?
- 6. Zend Framework bases de datos múltiples
- 7. Analizando la cadena "009" como un entero en javascript?
- 8. Obteniendo un nombre de función como una cadena
- 9. En Zend Framework usando MultiDB Resource, ¿cómo configuro el respaldo de la base de datos?
- 10. ¿Cómo puedo usar un procedimiento almacenado en una base de datos MySql con Zend Framework?
- 11. Entity Framework 4.0 Uso Valor base de datos predeterminada
- 12. Modular Zend Framework con una base de parciales
- 13. isValid en el formulario zend framework devuelve FALSE
- 14. Zend Framework - Actualizar una fila de base de datos con WHERE y Y
- 15. PreferenceActivity: guardar el valor como número entero
- 16. Actualización de datos utilizando Entity Framework
- 17. Zend Framework: ¿Cómo hacer una selección de base de datos con múltiples params?
- 18. postgres "devuelve la tabla" devuelve una cadena
- 19. Obteniendo filas en una tabla de base de datos MySQL utilizando MySQL C API y C++
- 20. Eliminar fila en la tabla de la base de datos dado un valor de columna - que es una cadena
- 21. Zend Framework: Poblando datos DB a un elemento de formulario desplegable Zend
- 22. Zend Framework 2 para Zend Framework Newbie
- 23. SQL select replace entero con la cadena
- 24. Entity Framework 4.3 primer nombre de la base de datos
- 25. Cómo obtener el nombre de la base de datos de la cadena de conexión utilizando SqlConnectionStringBuilder
- 26. cómo asignar enumeración como cadena en la base de datos
- 27. Store enum como cadena en la base de datos
- 28. Devuelve un valor de cadena basado en la condición XPATH
- 29. Type.GetType (typeName cadena) devuelve un valor nulo
- 30. devuelve un valor de la base de datos con mysql php pdo