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

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

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

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

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


手掌心
浏览 618回答 3
3回答

拉风的咖菲猫

我认为在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数据类型.是的,如果你想使用像这样的运算符,这是很糟糕的。===和!==对类型敏感的.

小怪兽爱吃肉

首先回答你的最后一个问题,“是的”,不幸的是,接收数字作为字符串是正常的。正如Pascal引用的手册所述,mysqlnd(PHP5.3)将从准备好的语句中返回本机数据类型,前提是关闭PDO的准备语句模拟。new PDO($dsn, $user, $pass, array(     PDO::ATTR_EMULATE_PREPARES => false))PDO:ATTR_STRINGIFY_FETCH与MySQL无关。如果你看到好的一面,最好还是使用预先准备好的陈述,所以.;)
打开App,查看更多内容
随时随地看视频慕课网APP