我已经在Stack Overflow上重复了几次这个问题,但是没有一个人充分探讨这个问题(或者至少以一种对我有帮助的方式)
问题在于,数据库查询应在PHP中为整数列返回整数数据类型。而是查询将每一列作为字符串类型返回。
我已经确保“ PDO :: ATTR_STRINGIFY_FETCHES”为 false 只是为了确保结果不会被强制转换为字符串。
我见过的答案:
根据我的研究,我知道这是驱动程序实施的问题。
许多消息来源声称MySQL本机驱动程序不支持返回数字类型。由于它可以在Mac OS X上运行,因此似乎并非如此。除非他们的意思是说“ Linux
上的MySQL本机驱动程序不支持该功能”。
这意味着我在Mac OS X上安装的驱动程序/环境有一些特殊之处。我一直在尝试找出差异以便应用修复程序,但我对如何检查这些问题的知识感到受限制。
pdo_mysql
MySQL的PDO驱动程序=>启用的客户端API版本=> 5.1.72
pdo_mysql
适用于MySQL的PDO驱动程序=>启用的客户端API版本=> mysqlnd 5.0.10-20111026-$
Id:e707c415db32080b3752b232487a435ee0372157 $
PDO::ATTR_CASE => PDO::CASE_NATURAL,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL,
PDO::ATTR_STRINGIFY_FETCHES => false,
PDO::ATTR_EMULATE_PREPARES => false,
任何帮助和专业知识将不胜感激:)如果我找到答案,我一定会在这里发布。
解决方案是确保您使用的是php 的 mysqlnd 驱动程序。
查看时php -i
, 不会 提及“ mysqlnd”。该pdo_mysql
部分将具有以下内容:
pdo_mysql
PDO Driver for MySQL => enabled Client API version => 5.1.72
大多数L / A / M / P的安装指南都建议使用,apt-get install php5-mysql
但MySQL的本机驱动程序是通过其他软件包安装的:php5-mysqlnd
。我发现这可用于 ppa:ondrej /
php5-oldstable
。
要切换到新驱动程序(在Ubuntu上):
删除旧驱动程序:
apt-get remove php5-mysql
安装新的驱动程序:
apt-get install php5-mysqlnd
重新启动apache2:
service apache2 restart
现在php -i
将在该pdo_mysql
部分中明确提及“ mysqlnd” :
pdo_mysql
PDO Driver for MySQL => enabled
Client API version => mysqlnd 5.0.10 - 20111026 - $Id: e707c415db32080b3752b232487a435ee0372157 $
确保PDO::ATTR_EMULATE_PREPARES
是false
(检查默认值或进行设置):
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
确保PDO::ATTR_STRINGIFY_FETCHES
是false
(检查默认值或进行设置):
$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
†值大于64位有符号整数(9223372036854775807)的BIGINT将作为字符串返回(或在32位系统上为32位)
object(stdClass)[915]
public 'integer_col' => int 1
public 'double_col' => float 1.55
public 'float_col' => float 1.5
public 'decimal_col' => string '1.20' (length=4)
public 'bigint_col' => string '18446744073709551615' (length=20)
问题内容: 我在MySQL数据库中有一个表字段: 因此,我使用以下查询将其调用到我的页面: 然后,为了处理结果,我要做: 现在,如果我这样做: 我得到一个字符串。 这不是整数吗? 问题答案: 当您使用PHP从MySQL数据库中选择数据时,数据类型将始终转换为字符串。您可以使用以下代码将其转换回整数: 或使用功能:
问题内容: 我不尝试使用循环。我只是从一行的一列中获取一个值。通过以下代码,我得到了想要的东西,但是使用PDO必须有一种更简单的方法。 看起来好像太多行无法从数据库中获得一个值。:\ 问题答案: 您可以为此创建一个函数,并在每次需要单个值时调用该函数 然后,您可以简单地执行以下操作: 因此,您只需创建一次该函数,即可将其重新用于具有不同列名的不同表。 社区编辑: 出于安全原因,请避免将字符串连接以
我们有一个关于MySQL中返回错误整数值的函数的问题。我们已经检查了“booked_passeters”是否包含正确的值0,并且当移除该变量时,它可以正常工作,也就是说只返回整数40。但是,当我们试图从它中减去“booked_passeters”(最终仍应返回40)时,它就不起作用了。 包括下面的代码。 提前道谢!:-)
问题内容: 好的,当我运行下面提到的代码时,PHP会向我(在日志中)抛出此错误: 错误 mysql_num_rows()期望参数1为资源,在第10行(位置)中给出的字符串 9-11行 我认为它与$ queryFP的语法有关,但是我不确定如何解决它,因为$ queryFP的语法是我见过的最简单的查询。 问题答案: 您需要先查询数据库。 应该:
问题内容: 我对包含type列的表进行了此简单查询。 但是,当我查询它时,pg-promise将该列的值作为字符串返回。我在文档中找不到有关此信息。那是标准行为吗? 采用以下形式,其中id作为字符串而不是int: 有什么指示pg-promise返回实际类型吗? 问题答案: 历史上一直在积淀很多东西。但是,如果您使用的是Node.js v10.4.0或更高版本,则可以跳过所有步骤,然后跳到底部的部分
问题内容: 我有一个充满随机内容项ID的数组。我需要运行mysql查询(数组中的ID在WHERE子句中),并使用数组中的每个ID并按照它们在所述数组中出现的顺序进行操作。我该怎么做? 对于数组中的每个ID,这将是一个UPDATE查询。 问题答案: 与几乎所有“如何在PHP中执行SQL”问题一样,您 实际上 应该使用准备好的语句。这并不难: 或者,您可以这样做: 根据需要为其他字段添加更多参数占位符