测试字符串是否可以是布尔值PHP

时间:2011-11-25 17:56:29

标签: php boolean

我从$ _GET获取一个字符串,我想测试它是否是一个布尔值,然后才将它用于mysql查询的一部分。是否有更好的方法:

function checkBool($string){
    $string = strtolower($string);
    if ($string == "true" || $string == "false" || 
        $string == "1" || $string == "0"){
        return true;
    }
    else {
        return false;
    }
}

if (checkBool($_GET['male'])){
    $result = mysql_query(
        "SELECT * FROM my_table " .
        "WHERE male='".$_GET['male']."'") or die(mysql_error());
}

8 个答案:

答案 0 :(得分:11)

您可以使用is_bool()或建议使用php.net:

<?php
$myString = "On";
$b = filter_var($myString, FILTER_VALIDATE_BOOLEAN);
?>

http://php.net/manual/en/function.is-bool.php

后者接受“on”和“yes”等字符串也是正确的。

答案 1 :(得分:11)

顺便说一下,有一种更清晰的写作方式:

function checkBool($string){
    $string = strtolower($string);
    return (in_array($string, array("true", "false", "1", "0", "yes", "no"), true));
}

但是是的。你记下的是唯一的方法。

答案 2 :(得分:2)

没有你得到它,你没有更多的东西可以做,你得到的所有可能的值通常被认为是真或假,你正在以正确的方式进行比较,你可以使用IN_ARRAY进行优化也许,但即便如此,我发现这个版本已经非常好了。

答案 3 :(得分:2)

布尔变量包含真值或假值。要测试字符串是否可以是布尔值,可以使用不同的方法:

  • is_bool($var):函数 is_bool() 检查变量的类型是否为布尔值并返回 true 或 false。

  • 使用“===”或 ($var===true || $var===false) 进行比较:如果将变量与运算符“=== ”与真假和 如果它与其中一个值相同,则它是一个布尔值。 由于 is_bool($var) 的功能是相同的,该函数应该 优先考虑。

  • 使用“==”或 ($var == true || $var == false) 进行比较:如果您使用“==”作为运算符,则测试为更宽容。例如,0(整数)或“”(空字符串)也会产生布尔值。

How to check if a variable is a Boolean in PHP?中阅读更多

答案 4 :(得分:1)

你的checkBool()非常正确,恕我直言,虽然生成的SQL代码存在问题。 您可以使用TRUE and FALSE,但必须注意它们不是字符串:

  

常量TRUE和FALSE分别计算为1和0。该   常数名称可以用任何字母组写。

所以它说的是:

"SELECT * FROM my_table WHERE male='".$_GET['male']."'"

......应该这样说:

'SELECT * FROM my_table WHERE male='.$_GET['male']

如果checkBool()实际上是convertToBool()并且您将使用其结果值而不是原始的$ _GET提供查询,那会感觉更好,但您的代码并没有真正错误。

顺便说一句,我假设您使用的是BOOL column type。这就是手册所说的:

  

这些类型是TINYINT(1)的同义词。值为零   假。非零值被认为是真的

当然,由您来决定使用BOOL,ENUM,CHAR(1)还是其他任何东西,以及是否接受33作为TRUE的同义词; - )

答案 5 :(得分:1)

如果您使用标记FILTER_NULL_ON_FAILUREfilter_var()将很有效:

function CheckBool($Value) {
  return null !== filter_var($Value, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
}

答案 6 :(得分:0)

对于它的价值,如果你真的想接受“是”或“否”作为用户的有效输入,那么我会做这样的事情:

function toBoolean($string){
    $string = strtolower($string);
    if ($string == "true" || $string == "1"|| $string == "yes" )
        return true;
    elseif ($string == "false" || $string == "0" || $string == "no")
        return false;
    else
        throw new Exception("You did not submit a valid value, you naughty boy");
}

try {
    $query = "SELECT * FROM my_table WHERE male=" . (toBoolean($_GET['male']) ? "1" : "0" );
    $result = mysql_query($query) or die(mysql_error());
} catch (Exception $e) {
    // handle bad user input here
}

答案 7 :(得分:0)

您可以使用is_bool来测试字符串:

if(is_bool($val)){
  // is boolean
}else{
  // not a boolean
}