我从$_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());
}
您可以使用is_bool()
或php.net上的建议:
<?php
$myString = "On";
$b = filter_var($myString, FILTER_VALIDATE_BOOLEAN);
?>
http://php.net/manual/en/function.is-bool.php 后者将接受像"on"answers"yes"这样的字符串为真。
顺便说一下,有一种更简洁的写法:
function checkBool($string){
$string = strtolower($string);
return (in_array($string, array("true", "false", "1", "0", "yes", "no"), true));
}
但是的。你写的那个是唯一的方法
如果您使用标志FILTER_NULL_ON_FAILURE
, filter_var()
将很好地工作:
function CheckBool($Value) {
return null !== filter_var($Value, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
}
不,你得到了它,你没有什么可以做的,你得到了所有可能的值,通常会被认为是真或假,你做比较的方式是正确的,你可以使用IN_ARRAY来优化它,但即使如此,我发现这个版本已经很好了
布尔变量包含真值或假值。要测试string是否可以是布尔值,可以使用不同的方法:
-
is_bool($var):函数is_bool()检查变量的类型是否为布尔值并返回true或false。
-
使用"==="或($var===true || $var=== =false)比较:如果您将变量与操作符"==="与true和false进行比较如果它与其中一个值相同,那么它就是一个布尔值。因为is_bool($var)的功能是相同的,所以函数应该优先考虑。
-
使用"=="或($var == true | $var == false)的比较:如果您使用"=="作为操作符,则测试更具容忍度。例如,0(整数)或" "(空字符串)也会产生布尔值。
阅读更多在如何检查一个变量是否是一个布尔值在PHP?
您的checkBool()是非常正确的,恕我直言,尽管结果SQL代码存在问题。您可以使用TRUE和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列类型。手册是这样说的:
这些类型是TINYINT(1)的同义词。考虑值为0假的。非零值被认为是真
当然,这取决于您是否使用BOOL, ENUM, CHAR(1)或其他任何东西,以及是否接受33
作为TRUE的同义词;-)
无论如何,如果您真的想接受来自用户的"yes"或"no"作为有效输入,那么我会这样做:
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
}
您可以使用is_bool
来测试您的字符串:
if(is_bool($val)){
// is boolean
}else{
// not a boolean
}