我从$ _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());
}
答案 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(整数)或“”(空字符串)也会产生布尔值。
答案 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_FAILURE
,filter_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
}