带有 native mysql 驱动程序 ( mysqlnd ) 的 php pdo - 获取保留 native 列类型的数据

标签 php mysql pdo types

如何从保留 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/

相关文章:

php - REGEX 用于清理具有多个空格、制表符、空行的多行字符串 (PHP Preg_Replace)

php - 有没有办法在 UPDATE 查询中将 PDO 与动态列名一起使用?

php - Paypal 休息api

php - 不想要 Zend Framework View 的短标签。是否有 $view->setUseStreamWrapper(true) 的替代方案?

mysql - 创建mysql数据库并使用规范化

php - 查看与您的 MariaDB 服务器版本对应的手册,了解在 'WHERE id=' 附近使用的正确语法\r\n

mysql - 如何将大型 csv 文件导入 mysql?

php - 获取类中函数的返回值

php - MySQL 拒绝仅访问 laravel

php - 在 sendgrid 电子邮件中的电子邮件内容中包含我的 html 代码