如何使用PDO从MySQL获取数字类型?
我使用的是PDO和MySQL,出于某种原因,当从数据库中获取int类型的值时,PDOStatement返回的是数字的字符串表示形式,而不是数字类型的值。如何防止这种情况发生?
我注意到PDO类有一个属性:它应该处理这个问题,但是,当尝试修改它时,它会抛出一个错误,说该属性对MySQL驱动程序无效。PDO::ATTR_STRINGIFY_FETCHES
在查询数据库时获取字符串而不是数字是否正常?
我使用的是PDO和MySQL,出于某种原因,当从数据库中获取int类型的值时,PDOStatement返回的是数字的字符串表示形式,而不是数字类型的值。如何防止这种情况发生?
我注意到PDO类有一个属性:它应该处理这个问题,但是,当尝试修改它时,它会抛出一个错误,说该属性对MySQL驱动程序无效。PDO::ATTR_STRINGIFY_FETCHES
在查询数据库时获取字符串而不是数字是否正常?
首先回答你的最后一个问题,“是”,不幸的是,以字符串形式接收数字是正常的。正如Pascal引用的手册所说,mysqlnd(PHP 5.3)将从预准备语句返回本机数据类型,前提是您从PDO关闭预准备语句仿真。
new PDO($dsn, $user, $pass, array(
PDO::ATTR_EMULATE_PREPARES => false
))
PDO::ATTR_STRINGIFY_FETCHES与MySQL无关。
如果你看一下好的一面,无论如何使用准备好的陈述是很好的做法,所以......;)
我不认为在PHP 5.2中可以完成“数字”:-(
如果我没记错的话,在 PHP 5.3 中,当您使用新的(PHP >= 5.3 中的新)mysqlnd(MySQL Native Driver)驱动程序时,这是可能的。
好吧,在进一步挖掘我的书签之后,我发现了这篇文章 关于 mysqlnd : PDO_MYSQLND: PHP 5.3 中PDO_MYSQL的新功能
它说这个(引用):
将 mysqlnd 用于 PDO 的优势
mysqlnd 在使用服务器端预准备语句时返回本机数据类型,例如,INT 列作为整数变量而不是字符串返回。这意味着内部数据转换更少。
但这只是 PHP 5.3(前提是您的 PHP 5.3 版本是使用 mysqlnd 编译的(而不是旧的 libmysql)),并且似乎只适用于预准备语句:-(
不好意思。。。
一个解决方案是在PHP端有一个映射系统(像ORM一样 - 参见教义;只是作为ORM的一个例子:我不知道它是否符合你的要求)将来自DB的结果转换为PHP数据类型...
是的,如果你想使用像 和 这样的运算符,这是不好的,这些运算符对类型敏感...===
!==