一尘不染

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

mysql

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

我注意到有一个PDO类的属性:PDO::ATTR_STRINGIFY_FETCHES应该可以解决这个问题,但是在尝试修改它时,它抛出一个错误,指出该属性对MySQL驱动程序无效。

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


阅读 490

收藏
2020-05-17

共1个答案

一尘不染

我不认为可以在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的优点

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

但这仅是PHP 5.3(前提是您的PHP 5.3版本是使用mysqlnd编译的( 而不是旧的libmysql) ),并且似乎仅适用于已准备好的语句:-(

抱歉…

一种解决方案是在PHP端具有一个映射系统 _(例如ORM-参见 Doctrine;仅作为ORM的一个示例:我不知道它是否满足您的要求)_来转换结果从数据库到PHP数据类型…

是的,如果要使用类型敏感的运算符(例如)===和,这是很不好的!==

2020-05-17