我使用PDO和MySQL,出于某种原因,当从数据库中获取int类型的值时,PDOStatement返回的是数字的字符串表示形式,而不是数字类型的值。如何防止这种情况发生?
我注意到有一个PDO类的属性:PDO::ATTR_STRINGIFY_FETCHES应该可以解决这个问题,但是在尝试修改它时,它抛出一个错误,指出该属性对MySQL驱动程序无效。
PDO::ATTR_STRINGIFY_FETCHES
查询数据库时,获取字符串而不是数字是否正常?
我不认为可以在PHP 5.2中完成“数字”操作 :-(
如果我没记错的话,在PHP 5.3中,当您使用新的 (在PHP > = 5.3中是新的) mysql nd (MySQL本机驱动程序) 驱动程序时,就有可能。
好吧,在进一步浏览我的书签之后,我发现了有关mysqlnd的这篇文章: PDO_MYSQLND: The new features of PDO_MYSQL in PHP 5.3
PDO_MYSQLND: The new features of PDO_MYSQL in PHP 5.3
它说(引用):
对PDO使用mysqlnd的优点 当使用服务器端的预处理语句时,mysqlnd返回本机数据类型,例如,INT列作为整数变量而不是字符串返回。这意味着内部的数据转换较少。
对PDO使用mysqlnd的优点
当使用服务器端的预处理语句时,mysqlnd返回本机数据类型,例如,INT列作为整数变量而不是字符串返回。这意味着内部的数据转换较少。
但这仅是PHP 5.3(前提是您的PHP 5.3版本是使用mysqlnd编译的( 而不是旧的libmysql) ),并且似乎仅适用于已准备好的语句:-(
抱歉…
一种解决方案是在PHP端具有一个映射系统 _(例如ORM-参见 Doctrine;仅作为ORM的一个示例:我不知道它是否满足您的要求)_来转换结果从数据库到PHP数据类型…
是的,如果要使用类型敏感的运算符(例如)===和,这是很不好的!==。
===
!==