当查询给出1时返回true

时间:2015-02-13 14:26:34

标签: mysql php

我想在MySQL数据库中保存true/false。我将1 / 0保存在INT列中以执行此操作。当我select时,我会收到10,但我希望它将true / false返回给我的PHP代码,而不必重写数据库。

我可以使用其他列类型吗?我应该以不同方式保存吗?

更新:我的问题是不想重写返回的值。我从我的数据库中获得了很多结果。其中许多是真/假,但有些是0,因为价格是0,所以我不想普遍重写所有的1和0。我也不想手动重写10列。

3 个答案:

答案 0 :(得分:3)

要跟进我的评论,这里有一个更详细的回复,也涵盖了PHP方面,虽然这可能属于StackOverflow

我一直只使用tinyint,但您可以使用bool / boolean作为tinyint(1)的同义词

但是,从MySQL 5.0.3开始,您可以使用the bit type

  

从MySQL 5.0.3开始,BIT数据类型用于存储位字段值。一种BIT(M)允许存储M位值。 M可以在1到64之间。

接下来,假设您有一个active列,如果用户处于活动状态可能存储,您可以使用PHP的自动类型转换来非常简单地处理它。

// Obviously you'd replace this with your database call
$results = [['active' => 1], ['active' => 0]];

foreach($results as $row) {
  if ($row['active'] == true) {
    echo "true\n";
  }
  else {
    echo "false\n";
  }
}

答案 1 :(得分:2)

您不需要做任何事情。

PHP不会,也不能使用强类型变量。因此,如果您从查询结果中收到(int) 1,则只需将此1用作布尔值,而无需重写或更改任何内容。

$intOne = (int) 1; //explicitly treat the variable as an integer
var_dump((bool) $intOne); //treat the variable as a boolean

当在任何布尔上下文中使用时,如if ($variable)...,那么PHP中的任何类型都将被视为false

  
      
  • 布尔值FALSE本身
  •   
  • 整数0(零)
  •   
  • 浮点数0.0(零)
  •   
  • 空字符串,字符串“0”
  •   
  • 包含零元素的数组
  •   
  • 一个零成员变量的对象(仅限PHP 4)
  •   
  • 特殊类型NULL(包括未设置的变量)
  •   
  • 从空标签创建的SimpleXML对象
  •   

......最重要的是,

  

其他每个值都被视为TRUE(包括任何资源)。

来源:PHP Manual > Booleans (english)

因此,虽然您可以在mysql中更改列的存储类型,但这并不会真正改变PHP处理从结果中检索到的变量的方式。

从历史上看,我总是使用类型TINYINT(1)的列来在mysql中存储布尔值,正如Tom Green指出的那样,最近的mysql版本提供了一种新的BIT类型,这可能是合适的。据我所知,mysql目前没有实际的布尔数据类型。

你可以轻松地使用VARCHAR(1)类型的列,因为PHP可以并且将使用任何值作为布尔值,这要归功于光荣,雄伟,有时令人发狂的PHP Type Juggling

如果你正在尝试使用你正在检索布尔逻辑的值,只需使用你从mysql收到的值,比如布尔值,它就会起作用:

if ($valueFromResults) {
  //The value was something like true

} else {
  //The value was something like false

} 

如果你试图真实地回应“真实”和“虚假”这两个词,那么你可能最好通过明确回应你自己的话来做到这一点,就像这样;

if ($valueFromResults) {
  echo "true";
} else {
  echo "false";
}

或者,用我喜欢的速记;

echo ($valueFromResults) ? "true" : "false" ;

更新您在评论中提到要通过json_encode()传递值并在javascript中使用它们。

JavaScript会将任何实际值(如int 1)视为true,将任何空值(如int 0)或空字符串视为false。因此,如果您的json_encode()输出在实际JavaScript中使用,则int值仍将作为布尔值使用。因此,数据库中的整数值仍应按原样运行。

只需检查您的整数结果是否由PHP编码为整数而不是字符串 - 默认情况下它们应该正确编码 - 因为"0" == true在javascript中,但是0 == false

答案 2 :(得分:1)

对于布尔值(true / false),您应该使用mySql类型bittinyint(1)

$boolean = $mysql_data ? true : false;