如何使用PDO从MySQL获取数字类型?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (63)

我使用的是PDO和MySQL,因为某些原因,当从数据库中获得int类型的值时,PDOStatement返回的是数字的字符串表示,而不是数值类型的值。我该如何防止这种情况发生?

我注意到PDO类有一个属性:PDO::ATTR_STRINGIFY_FETCHES这应该是为了解决这个问题,但是当试图修改它时,它会抛出一个错误,说明属性对MySQL驱动程序无效。

在查询数据库时,获取字符串而不是数字是正常的吗?

提问于
用户回答回答于

我认为在PHP 5.2中没有“数字”

它说(引用):

利用mysqlnd进行PDO的优势当使用服务器端准备语句时,mysqlnd返回本机数据类型,例如,int列作为整数变量返回,而不是作为字符串返回。这意味着内部数据转换减少。

但这只是PHP 5.3(如果你的PHP 5.3版本是用mysqlnd编译的)(而不是旧的libmysql)),而且似乎只适用于准备好的陈述:-(

一个解决方案是在php端建立一个映射系统。(就像一个ORM-看学说作为ORM的一个例子:我不知道它是否符合你的要求)要将来自DB的结果转换为PHP数据类型...

是的,如果想使用操作符,这是很糟糕的,比如===!==它们对类型敏感...

用户回答回答于

首先回答你的最后一个问题,“是的”,不幸的是,接收数字作为字符串是正常的。正如Pascal引用的手册所述,mysqlnd(PHP 5.3)将从准备好的语句中返回本机数据类型,前提是关闭PDO的准备语句模拟。

new PDO($dsn, $user, $pass, array(
    PDO::ATTR_EMULATE_PREPARES => false
))

如果你看到好的一面,那么最好还是使用预先准备好的语句,所以...)

扫码关注云+社区