如何从保留 mysql 原生类型列的 pdo-mysql 中获取数据?
示例:我从表中检索一些数据。该表包含 id 列,它是一个整数列。当从这个表中获取数据时,php 结果数组的 id 字段像一个字符串,而不是整数。
array(3) { ["id"]=> string(2) "11"
["name"]=> string(24) "test name"
["surname"]=> string(2) "test suname"
}
我知道使用 mysqlnd 驱动程序我可以获得它作为 php 中的默认类型。
我使用 php 5.3 并且启用了 mysqlnd:
shell$ php -i | grep -i mysql
MySQL Support => enabled
Client API version => mysqlnd 5.0.8-dev - 20102224 - $Revision: 308673 $
mysql.allow_local_infile => On => On
mysql.allow_persistent => On => On
mysql.connect_timeout => 60 => 60
mysql.default_host => no value => no value
mysql.default_password => no value => no value
mysql.default_port => 3306 => 3306
mysql.default_socket => /var/mysql/mysql.sock => /var/mysql/mysql.sock
mysql.default_user => no value => no value
mysql.max_links => Unlimited => Unlimited
mysql.max_persistent => Unlimited => Unlimited
mysql.trace_mode => Off => Off
mysqli
MysqlI Support => enabled
Client API library version => mysqlnd 5.0.8-dev - 20102224 - $Revision: 308673 $
mysqli.allow_local_infile => On => On
mysqli.allow_persistent => On => On
mysqli.default_host => no value => no value
mysqli.default_port => 3306 => 3306
mysqli.default_pw => no value => no value
mysqli.default_socket => /var/mysql/mysql.sock => /var/mysql/mysql.sock
mysqli.default_user => no value => no value
mysqli.max_links => Unlimited => Unlimited
mysqli.max_persistent => Unlimited => Unlimited
mysqli.reconnect => Off => Off
mysqlnd
mysqlnd => enabled
Version => mysqlnd 5.0.8-dev - 20102224 - $Revision: 308673 $
PDO drivers => mysql, sqlite, sqlite2
pdo_mysql
PDO Driver for MySQL => enabled
Client API version => mysqlnd 5.0.8-dev - 20102224 - $Revision: 308673 $
pdo_mysql.default_socket => /var/mysql/mysql.sock => /var/mysql/mysql.sock
如何获取原生类型的数据?
最佳答案
有 PDO::ATTR_STRINGIFY_FETCHES
参数,理论上它控制数字(据我所知,没有办法使用任何 MySQL 驱动程序获取带有日期的 native 对象):
PDO::ATTR_STRINGIFY_FETCHES: Convert numeric values to strings when fetching. Requires bool.
您可以使用 PDO::setAttribute() 更改它.然而,驱动程序总是可以自由实现特定的 PDO 功能,而 MySQL 似乎不支持这一点。
也就是说,一些用户报告说字符串化提取是在模拟参数模式下运行查询的副作用,因此您始终可以禁用它:
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
请注意,启用/禁用此类模式会产生额外的副作用,包括:
- 不能多次使用命名参数
- 获取引用的数字参数(特别是打破
LIMIT
子句)
关于带有 native mysql 驱动程序 ( mysqlnd ) 的 php pdo - 获取保留 native 列类型的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10103846/