【问题标题】:php selecting from mysql and receiving th data typesphp从mysql中选择并接收数据类型
【发布时间】:2011-07-21 07:40:54
【问题描述】:

在 PHP 中从 MySQL 表中选择时,结果总是字符串。有没有办法获得正确的数据类型?

考虑一下我的桌子:

 CREATE TABLE bar(
     id    INT,
     price FLOAT,
     name  VARCHAR(40));

现在我要做的是:

   $result = mysql_query("SELECT id,price,name FROM bar");
   while($row = mysql_fetch_assoc($result))
   { 
      $row['id'] = (int)$row['id'];
      $row['price'] = (double)$row['price'];
   }
   mysql_free_result($result);

有没有办法透明地从查询中正确获取数据类型?

10 倍, 阿维夫​​p>

【问题讨论】:

  • 你为什么需要这个? php 是一种动态类型化较弱的语言。这就是我们喜欢它的原因(是的,我们喜欢它;-)。不要试图改变它。如果您需要一些具有强大动态类型化的语言(这就是您想要获得的),您可以尝试 python。
  • 我也喜欢 PHP,但有时,例如在这种情况下,我将它作为 JSON 返回,而在 JavaScript 中,我需要它作为排序机制的数字或字符串。
  • 我不得不同意,PHP 中的弱类型确实比它的价值更麻烦,并且强制数据为特定类型可以解决弱类型的大多数问题可导致。看看我关于 switch 语句的问题,看看会出现什么问题。 stackoverflow.com/questions/4098104/…

标签: php mysql database variables types


【解决方案1】:

不,所有来自mysql的数据实际上都是一个字符串,你不能用它做任何事情。

【讨论】:

  • 2021年还是这样吗?
【解决方案2】:

其实没有, 你唯一能做的就是检查数据类型,

伪:

if(is_int())
    (int)....
else if(is_float())
    (float)...
else ...

并检查您期望的所有类型... 作为最后的手段,它总是字符串。

但如果您使用 PDO,您可以获得列的数据类型并进行相应的转换...

见:List of PHP native_type's for PDO getColumnMeta()

【讨论】:

  • 对于is_int()is_float(),字符串将始终返回false
  • 好的,你必须先使用 is_numeric,但想法保持不变
  • is_numeric() 也将始终返回 false 作为字符串。
  • 是的,我的错(+1 抓住我)。但是这个解决方案仍然受到错误影响,因为它可能是一个存储在varchar(2) 中的string '42'。它应该被视为一个字符串(至少这是 OP 想要的)。
【解决方案3】:

这不是问题的答案,而是解决问题的一种方法(破解?)。

CREATE TABLE bar(
    int_id       INT,
    float_price  FLOAT,
    varchar_name VARCHAR(40)
);

然后,当您检索所有内容时,遍历列/键名并根据类型(第一个下划线之前的所有内容)和列名(第一个下划线之后的所有内容)处理它们。

此外,这需要您编辑表格。这可能会出现问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-20
    • 2015-01-07
    • 2011-08-01
    • 2023-03-24
    • 2016-04-23
    • 2021-02-25
    • 2012-08-17
    • 1970-01-01
    相关资源
    最近更新 更多