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

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

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

【问题讨论】:

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

标签: php mysql mysqli types


【解决方案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 等。

            【讨论】:

              猜你喜欢
              • 2013-12-03
              • 1970-01-01
              • 1970-01-01
              • 2020-05-30
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-04-28
              相关资源
              最近更新 更多