Desafortunadamente, con PHP < = 5.2, los MySQL funciones/clases (es decir mysql_*
, mysqli_*
, y PDO
) se basan en libmysql - una biblioteca C que proporciona soporte para la comunicación con el servidor MySQL.
Las funciones que utilizan la biblioteca que siempre devuelven cadenas, incluso para flotar número entero y columnas - y no hay nada que pueda hacer al respecto: la única solución es tener un poco de "capa de mapeo" (como un ORM) que " sabe ", en el lado de PHP, que tipo debe ser cada columna, y hará la conversión cada vez que se obtengan algunos datos de la base de datos.
Nota: la forma en que está insertando datos no cambia nada en cuanto al hecho de que obtendrá cadenas de caracteres cuando obtenga datos del DB.
Con PHP> = 5.3, las funciones que se comunican con un servidor MySQL puede utilizar mysqlnd (controlador nativo de MySQL) en lugar de libmysql - esto tiene que ser configurado en tiempo de compilación, sin embargo.
Y poder comunicarse con tipos de datos "nativos", en determinadas circunstancias, es una de las cosas agradables que mysqlnd proporciona; sobre eso, debería haber un par de informaciones interesantes es este artículo: PHP: New network traffic, CPU and memory savings with mysqlnd.
Para hace las cosas a corto:
- Con PHP 5.2, sólo obtendrá cuerdas de la base de datos; y tendrá que hacer alguna conversión de tipo usted mismo
- Con PHP 5.3, puede obtener tipos de datos nativos, al menos en algunos casos.
Primero, gracias, pero ¿por qué tengo que "decirle" el tipo de datos cuando este campo está declarado en la TABLA SQL como INT ... – aviv
, porque la interfaz db no es compatible con esto. Todo lo que obtienes de db es una variedad de cadenas.Puede convertir algunas de estas cadenas a otra cosa a nivel de aplicación, pero esto no sucederá "automágicamente" sin una capa ORM completa. – user187291