PDOStatement::fetchAll() 返回的数组中的每个字段都是字符串类型(PHP + MySQL)。如何保留原始字段类型?

Posted

技术标签:

【中文标题】PDOStatement::fetchAll() 返回的数组中的每个字段都是字符串类型(PHP + MySQL)。如何保留原始字段类型?【英文标题】:Every field in the array returned by PDOStatement::fetchAll() is of String type (PHP + MySQL). How can I reserve the original field type? 【发布时间】:2018-02-02 14:24:22 【问题描述】:

PDOStatement::fetchAll() 返回的数组中的每个字段都是String 类型(php + mysql)。我的意思是即使Integer 类型的那些字段也有结果的引号。

如何保留原始字段类型?这意味着,如果一个字段是Integer 类型,那么它不会在fetchAll() 返回的数组中包含引号。

【问题讨论】:

我认为这是正常的“行为”。您必须将 mysql 中的数据交换为您的特定类型。例如。键入铸造或水合你的对象。 这个答案可能会有所帮助,fetchall 总是以字符串形式返回结果。查看这个答案了解更多详情:***.com/questions/5323146/… 返回类型始终是来自 MySQL 的字符串。 PDO 不检查它是什么类型的列,只检查它的值。通常,这就是您所需要的 - 因为"3" == 3(3 的字符串与 3 的整数)是正确的。你能举一些例子说明为什么你需要原始类型吗? 您是否考虑过使用数据库表中的元数据并使用它来识别数字列并根据需要进行转换?您可以在获取后对结果集的每一列应用一个函数吗?它会稍微减慢速度,但会使结果集易于使用? 是的,实际上我已经这样做了,在for 循环中使用PDOStatement::getColumnMeta() 方法编写了一个转换函数。非常感谢! 【参考方案1】:

这个问题已经有了答案。请参阅上面的 cmets。尤其是@AliBAGHO发的链接,里面有更详细的讨论。

【讨论】:

以上是关于PDOStatement::fetchAll() 返回的数组中的每个字段都是字符串类型(PHP + MySQL)。如何保留原始字段类型?的主要内容,如果未能解决你的问题,请参考以下文章