如何从 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 作为具有整数索引的数组