PDO devuelve columnas enteras como cadena en PHP5.4

En primer lugar, soy consciente de que hay varias preguntas similares sobre SO, como esto y esto . Sin embargo, cuando obtengo valores de una tabla, los enteros siempre se captan como una cadena.

Estoy usando PHP5.4 (5.4.16-1 ~ dotdeb.1) y MYSQL5.5 (5.5.31 + dfsg-0 + wheezy1). Está escrito aquí que MySQL Native Driver está habilitado por defecto en PHP5.4.0. Pero todavía obtengo valores de cadena.

Inicializo un objeto PDO de la siguiente manera.

try { $dsn = 'mysql:host=' . DB_HOST . ';dbname=' . DB_NAME . ';charset=utf8'; $db = new PDO($dsn,DB_USER,DB_PASS); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); } catch (PDOException $e) { header('HTTP/1.1 500'); exit; } catch (Exception $e) { header('HTTP/1.1 500'); exit; } 

Cuando inserté, traté de usar el formato execute(array(...)) y también utilicé bindValue(...,PDO::PARAM_INT) , pero no hicieron la diferencia.

Por ejemplo, aquí es cómo inserto una nueva fila.

 public function insertList ($db,$account_id,$list_name) { $sql = $db->prepare('INSERT INTO lists VALUES (?,?,?,?,?)'); try { // $sql->execute(array($list_name,0,0,0,$account_id)); $sql->bindValue(1,$list_name,PDO::PARAM_STR); $sql->bindValue(2,0,PDO::PARAM_INT); $sql->bindValue(3,0,PDO::PARAM_INT); $sql->bindValue(4,0,PDO::PARAM_INT); $sql->bindValue(5,$account_id,PDO::PARAM_INT); $sql->execute(); } catch (PDOException $e) { header('HTTP/1.1 500'); exit; } catch (Exception $e) { header('HTTP/1.1 500'); exit; } } 

Así es como tomo las filas de una mesa

 public function fetchLists ($db,$account_id) { $sql = $db->prepare('SELECT * FROM lists WHERE account_id=?'); try { $sql->execute(array($account_id)); $result = $sql->fetchAll(PDO::FETCH_ASSOC); } catch (PDOException $e) { header('HTTP/1.1 500'); exit; } catch (Exception $e) { header('HTTP/1.1 500'); exit; } return $result; } 

Esto no ocurrió cuando probé en XAMPP para Linux 1.8.1 que usa PHP5.4.7. Actualmente uso nginx en lugar de Apache.

¿Qué está mal?

Para obtener enteros y flotantes con los tipos respectivos de mysql con PDO, necesita tanto el modo PDO-mysql basado en mysqlnd como el modo de emulación desactivados.