首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用PDO从MySQL中获取数值类型?

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

Stack Overflow用户
提问于 2009-07-29 06:02:32
回答 3查看 28.7K关注 0票数 66

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

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

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

EN

回答 3

Stack Overflow用户

发布于 2009-07-29 00:08:30

首先回答您的最后一个问题:“是”。不幸的是,以字符串形式接收数字是很正常的。正如Pascal引用的手册所说,mysqlnd (PHP5.3)将从预准备语句返回本机数据类型,前提是您从PDO关闭了预准备语句模拟。

new PDO($dsn, $user, $pass, array(
    PDO::ATTR_EMULATE_PREPARES => false
))

PDO::ATTR_STRINGIFY_FETCHES与MySQL无关。

如果从好的方面来看,不管怎样,使用准备好的语句是一个很好的实践,所以...;)

票数 68
EN

Stack Overflow用户

发布于 2013-03-24 06:26:54

Pascal's answer是正确的。我遇到了一些麻烦,使它所有的工作。这是你需要做的。

首先,确保您已经安装并激活了mysqlnd。看看php --info吧。在pdo_mysql部分中,它应该如下所示:

pdo_mysql

PDO Driver for MySQL => enabled
Client API version => mysqlnd 5.0.8-dev - 20102224 - $Revision: 321

如果您看到的不是Client API版本中的mysqlnd,而是下面这样的行...

Client API version => 5.5.29

...then你还没有安装mysqlnd。先处理好这件事。

其次,PDO使用模拟的预准备语句by default for all MySQL连接。很可笑,但事实就是如此。而且,只有在使用真正的预准备语句(在链接的博客文章中称为“服务器端预准备语句”,现在是here)时,您才能获得原生数据类型。因此,必须将PDO::ATTR_EMULATE_PREPARES设置为false,如下所示:

$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

最后,确保您没有将PDO::ATTR_STRINGIFY_FETCHES设置为true。

$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
票数 30
EN

Stack Overflow用户

发布于 2017-07-28 14:21:23

你可能已经安装了mysqlnd,但这并不意味着它可以被常规的PDO扩展(pdo_mysql)使用,这在共享主机上更常见,所以请确保启用nd_pdo_mysql扩展,并禁用其他扩展pdo_mysql,因为它可能会产生冲突。

@截图

我发现了这个(复制的) question,决定在这里发表我的想法,希望它是好的;)

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1197005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档