PHP!isset在未设置时返回true

时间:2013-09-22 03:29:05

标签: php

首先,我的代码:

    $stmt = $pdo->prepare("SELECT id FROM users WHERE
                                        username = :user_email OR
                                        email = :user_email");
        $user_email = $_POST["usernameemail"];
    $stmt->execute(array(
                                    'user_email'=>$user_email
                                    ));
    $account_exist = $stmt->fetch();
    if(!isset($account_exist)) {
        $account_exist_error = '<p style="color:#F00;">Username or Email not found</p>';
    }

$ query_exist_error在查询找不到任何内容时不会返回

我也试过

if($account_exist === '') {
    ect
}

这些都没有返回任何内容,其他相关问题对我没有帮助,$ account_exist =''在我的代码中设置了

3 个答案:

答案 0 :(得分:3)

通常情况下,empty($var_name)会更可靠,对于null,空白或未定义的任何内容都会返回true。这甚至包括空数组。

但是,在这种情况下,您将返回一个DB对象。 isset始终返回true,empty返回false。因此,您将要使用DB对象API。在这种情况下,您应该使用rowCount

答案 1 :(得分:1)

您可以使用

if(!$account_exist)

而不是

if(!isset($account_exist))

因为,它的返回值是

TRUE    Success. Data has been fetched
FALSE   Error occurred
NULL    No more rows/data exists or data truncation occurred

在这种情况下,falsenull都是假值,可与!运算符一起使用。如果你使用

f(!isset($account_exist))

然后,它总是被设置,因为$account_exist包含一个值。

答案 2 :(得分:0)

尝试

if ($account_exist == null)