如何从 MySQL 获取整数作为 PHP 中的整数?

Posted

技术标签:

【中文标题】如何从 MySQL 获取整数作为 PHP 中的整数?【英文标题】:How to get an integer from MySQL as integer in PHP? 【发布时间】:2011-06-28 05:21:10 【问题描述】:

mysql 返回数据时,无论 MySQL 数据类型如何,都会自动以字符串形式返回。

有没有办法告诉 MySQL/php 维护数据类型(例如 int),所以如果你查询一个 int 列,你会在 PHP 中得到一个整数而不是字符串?

【问题讨论】:

值得注意的是,PHP 不能保存大于 PHP_INT_MAX 的整数(在我的计算机中为 2,147,483,647)。这可以安全地存储已签名的 INT,但不能存储未签名的 INT 或任何更大的内容。 【参考方案1】:

你可以通过Type casting 使用 PHP 转换返回数据的类型。

你可以看看int, intval 来转换成整数。你也可以使用settype:

settype($foo, "array");
settype($foo, "bool");
settype($foo, "boolean");
settype($foo, "float");
settype($foo, "int");
settype($foo, "integer");
settype($foo, "null");
settype($foo, "object");
settype($foo, "string");

另一种方法是:

$foo = (array)$foo;
$foo = (b)$foo;      // from PHP 5.2.1
$foo = (binary)$foo; // from PHP 5.2.1
$foo = (bool)$foo;
$foo = (boolean)$foo;
$foo = (double)$foo;
$foo = (float)$foo;
$foo = (int)$foo;
$foo = (integer)$foo;
$foo = (object)$foo;
$foo = (real)$foo;
$foo = (string)$foo;

【讨论】:

如果您的整数大于PHP_INT_MAX,它将被封顶。例如,即使您运行的是 64 位 PHP,也无法将 MySQL 的 unsigned bigint 全部转换为 PHP。【参考方案2】:

在 MySQLi 中使用bind_result:它设置正确的类型并处理NULL

【讨论】:

PDO 也有这个能力。【参考方案3】:

如果您运行的是 Ubuntu:

sudo  apt-get remove php5-mysql
sudo  apt-get install php5-mysqlnd
sudo service apache2 restart

【讨论】:

【参考方案4】:

从 MySQL 数据库中提取数据后,您可以使用类型转换

$row['field'] = (int)$row['field'];

【讨论】:

【参考方案5】:

由于 PHP 不是强类型语言,这有点没有意义,但您当然可以在使用前通过 settype 等将相关字段转换为 int。

无论如何,没有办法(据我所知)自动维护这种“类型”信息。

【讨论】:

在寻求意义的过程中,我试图想象通过类型转换可能获得的性能提升。我认为将数值作为 int 或 float 会占用更少的内存,另一方面,手动类型转换过程本身会消耗资源并且还会使 php 代码膨胀一点。因此,手动类型转换对我来说似乎是肤浅的微优化,而如果可能的话,让 MySQL 返回正确类型的结果似乎是合理的。【参考方案6】:

PHP 的 MySQL 默认库没有任何此类选项。使用类型转换 比如 (int) 或 intval, (float) 等

【讨论】:

【参考方案7】:

在 php 中,你可以使用 ([type]) 来确保 $something 是整数,如果你知道的话,这有助于 sql 注入。

例如:

(int) $something;

【讨论】:

【参考方案8】:

我不知道您是在什么情况下提出这个问题的。因为 php 变量的数据类型取决于表中列的数据类型。如果该列在 mysql 中具有数据类型“int”,则在 php 中会得到一个整数(不是字符串)。

但无论如何,您可以使用 is_numeric()、is_int() 或 gettype() php 函数来了解 Mysql 返回值的数据类型。 is_numeric() 的问题在于,即使变量包含数字字符串,它也会返回 true,例如“2”。 但是 gettype() 将返回“string”,而 is_int() 在提到的示例中将始终返回 false,即“2”。

一旦您知道返回值的数据类型,您就可以绑定 php 变量以通过类型转换来维护该类型,如下所示:

// Suppose this is the returned value from mysql and
// you do not know its data type.
$foo = "2";

if (gettype($foo) == "string")
    $foo = (string) $foo;

您可以对变量的数据类型进行多次检查,然后进行相应的转换。

我希望这个回复会有所帮助。祝你好运! :)

【讨论】:

【参考方案9】:

如果你想得到按价格排序的值,你可以改变 从列到 FLOAT 的数据类型(例如:价格)

前:

表电子

price        id
----------------
55.90        1
40.33        2
10.60        3
1596.90      4
56.90        5

PHP:

$sql = $pdo->query("SELECT * FROM eletronics ORDER BY price DESC");

//结果

1596.90      4
56.90        5
55.90        1
40.33        2
10.60        3

//订单是按价格//OBS:您可以更改点 "," 使用 str_replace() //结果:1596,90 - 56,90 - 55,90 - 40,33 - 10,60 等。

【讨论】:

以上是关于如何从 MySQL 获取整数作为 PHP 中的整数?的主要内容,如果未能解决你的问题,请参考以下文章

我有一个整数数组,如何在 mysql 查询(在 php 中)中使用每个整数? [复制]

我有一个整数数组,如何在 mysql 查询(在 php 中)中使用每个整数? [复制]

如何从 javascript 变量发送表单值并在 php 中作为整数接收? [复制]

MySQL PDO fetchAll 作为具有整数索引的数组

如何通过 id 在 MySQL 中的 json 整数数组列中获取相关项目

WSDL 中的数组响应 - SOAP PHP