我注意到我的脚本中有一些奇怪的行为,不知道为什么会出现这种行为。
if ($date != 'NOW()' || $date != 'NULL')
{
// throw error
} else {
// run functions
}
我在我的一个函数中有一个类似于上面的IF语句,我从我的函数传递值'NULL'
,它正在接收。但是在与IF语句进行比较时,它不起作用。它总是跳过其他声明。
更新
下面是我的函数的完整代码,我希望它有所帮助。
public function setLastLoginDate( $date )
{
if (isset($date) && !empty($date))
{
if ($date != 'NOW()' || $date != 'NULL' || is_datetime(convertDateTimeToSql($date)) == false)
{
$this->errors['user_last_login'] = 'invalid date specified.';
} else {
this->properties['user_last_login'] = $date;
}
}
}
最后更新
使用&&确实工作而不是||,但我从来没有打算使用&&amp ;.
如果这就是它的假设那么我想我必须重新阅读。
不是&&检查两个变量是否返回true?
像if (is_string($foo) && strlen($foo) > 1)
?
但我想检查变量是否包含任何值
但这对我来说也很有用:
if ( $date == 'NOW()' || $date == 'NULL' || is_datetime(convertDateTimeToSql($date)) == true )
{
$this->properties['user_last_login'] = $date;
} else {
$this->errors['user_last_login'] = 'invalid date specified.';
}
进行了一些测试及其工作,因为我想要它与上述。 上面使用它有什么问题吗?
由于
答案 0 :(得分:6)
您询问条件不是值或而不是其他值,这将始终返回true。可能你想使用和代替(&&而不是||)。
答案 1 :(得分:4)
您的语句永远不会解析为false,因为字符串不能是两个不同的东西。条件为&&
。
所以你的陈述看起来像这样:
if( $date! = 'NOW()' && $date != 'NULL' ){
// run functions
}else{
// throw error
}
答案 2 :(得分:4)
检查您的if语句条件。你确定要比较那样吗?在我看来,date不能同时是'NOW()'和'NULL',这意味着你的if语句总是会成真。
还添加一些括号。
也许这更好?
if (($date != 'NOW()') && ($date != 'NULL'))
{
// run functions
} else {
// throw error
}
答案 3 :(得分:2)
你说if总是直接跳到 else 但是脚本的部分无法运行。原因是,正如其他人所指出的那样,你使用 OR ,你应该使用 AND 。 $ date变量永远不能同时为'NULL'和'NOW()',这意味着 if 将始终返回true并执行“无效日期”部分。
原因如下:
$date = 'NULL'
检查分三步完成(这些步骤可能不正确),
A:
$date != 'NOW()' // This returns true because $date is 'NULL'
B:
$date != 'NULL' // This returns false because $date is not 'not equal' to 'NULL'
C:
if (A || B) // If either one or both A and B is true then this is true.
// Since $date can never be both NULL and NOW() at the same time
// one of A or B is guaranteed to be true so the if() will always return true.
您需要的是:
C:
if (A && B) // If BOTH A and B are true then this is true.
答案 4 :(得分:1)
if ($date != 'NOW()' || $date != 'NULL')
这种逻辑捕获了一切。你确定它正在跳过else
吗?事实上永远不会使用else
; $date
永远不能与'NOW()'
和'NULL'
相等。
答案 5 :(得分:0)
除了你||
条件if
之外,&&
条件可能else
检查它是否真正跳转到else
部分。那是不可能的。
在您的伪代码中,您提到您在if
部分中抛出错误,但这与您稍后发布的实际代码不符。在else
之后,您有错误部分。
也许你刚刚交换了这一行,你仍然认为它会转到{{1}}部分。
答案 6 :(得分:-2)
NOW()
是一个mysql函数,而不是PHP函数。同时删除引号。