为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

手掌心 2019-07-06 17:51:04
如何使用PDO从MySQL获取数字类型?我使用PDO和MySQL,因为某些原因,当从数据库中获得int类型的值时,PDOStatement返回的是数字的字符串表示,而不是数值类型的值。我怎样才能防止这种情况发生?我注意到PDO类有一个属性:PDO::ATTR_STRINGIFY_FETCHES这应该是为了解决这个问题,但是当试图修改它时,它会抛出一个错误,说明该属性对MySQL驱动程序无效。在查询数据库时,获取字符串而不是数字是正常的吗?
查看完整描述

3 回答

?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

我认为在PHP5.2中没有“数字”:-(

在PHP5.3中,如果我记得正确的话,当您使用新的(新的如PHP>=5.3)MySQLNd (MySQL本机驱动程序)司机。

嗯,在我的书签上翻阅了更多之后,我找到了这篇关于mysqlnd的文章:PDO_MYSQLND: The new features of PDO_MYSQL in PHP 5.3

它说(引用):

利用mysqlnd进行PDO的优势

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

但这只是PHP5.3(前提是您的PHP5.3版本是用mysqlnd编译的)(而不是旧的libmysql)),而且似乎只适用于准备好的陈述:-(

对不起.。

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

是的,如果你想使用像这样的运算符,这是很糟糕的。===!==对类型敏感的.


查看完整回答
反对 回复 2019-07-06
?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

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

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

PDO:ATTR_STRINGIFY_FETCH与MySQL无关。

如果你看到好的一面,最好还是使用预先准备好的陈述,所以.;)


查看完整回答
反对 回复 2019-07-06
  • 3 回答
  • 0 关注
  • 617 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信