Mysql 当查询给出1时返回true

Mysql 当查询给出1时返回true,mysql,php,Mysql,Php,我想在MySQL数据库中保存一个true/false。我将1/0保存在INT列中以执行此操作。当我选择它时,我得到1或0,但我希望它将true/false返回到我的PHP代码中,而不必重写数据库 我可以使用其他列类型吗?我应该以不同的方式保存它吗 更新:我的问题是不想重写返回值。我从数据库中得到了很多结果。其中许多是真/假,但有些是0,因为价格是0,所以我不想普遍重写所有的1和0。我也不想手动重写10列。为了跟进我的评论,这里有一个更详细的回复,它也涵盖了PHP方面,尽管这可能属于 我一直只使用

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

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


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

为了跟进我的评论,这里有一个更详细的回复,它也涵盖了PHP方面,尽管这可能属于

我一直只使用
tinyint
,尽管你可以使用
bool
/
boolean
,这是
tinyint(1)

但是,从MySQL 5.0.3开始,您可以使用:

从MySQL 5.0.3开始,位数据类型用于存储位字段值。一种类型的位(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";
  }
}

为了跟进我的评论,这里有一个更详细的回复,它也涵盖了PHP方面,尽管这可能属于

我一直只使用
tinyint
,尽管你可以使用
bool
/
boolean
,这是
tinyint(1)

但是,从MySQL 5.0.3开始,您可以使用:

从MySQL 5.0.3开始,位数据类型用于存储位字段值。一种类型的位(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";
  }
}
对于布尔值(真/假),应该使用mySql类型
bit
tinyint(1)

对于布尔值(真/假),应该使用mySql类型
bit
tinyint(1)


你完全不需要做任何事情

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

  • 布尔值本身是假的
  • 整数0(零)
  • 浮动0.0(零)
  • 空字符串和字符串“0”
  • 零元素数组
  • 具有零成员变量的对象(仅限PHP 4)
  • 特殊类型NULL(包括未设置的变量)
  • 从空标记创建的SimpleXML对象
。。。最重要的是,

其他所有值均视为真(包括任何资源)

资料来源:

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

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

不过,您也可以轻松地使用类型为
VARCHAR(1)
的列,因为PHP可以并且将使用任何值作为布尔值,这要感谢光荣、庄严、有时令人疯狂的

如果您试图使用正在检索的布尔逻辑值,只需使用从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\u encode()
传递值并在javascript中使用它们


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


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

您无需严格执行任何操作

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

  • 布尔值本身是假的
  • 整数0(零)
  • 浮动0.0(零)
  • 空字符串和字符串“0”
  • 零元素数组
  • 具有零成员变量的对象(仅限PHP 4)
  • 特殊类型NULL(包括未设置的变量)
  • 从空标记创建的SimpleXML对象
。。。最重要的是,

其他所有值均视为真(包括任何资源)

资料来源:

因此,虽然您可以更改您的存储类型