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