变量的值在if条件之前变化

时间:2014-01-12 20:41:34

标签: php mysql exit

public function checkIfTeamExists($team) {
    $array = array();
    try {
        $sth = $this -> db -> prepare("SELECT * FROM teams WHERE Name = :team");
        $sth -> execute(array(':team' => $team));
        foreach ($sth->fetchAll(PDO::FETCH_ASSOC) as $row) {
            $array[] = $row;
        }
        return $array;
    } catch (Exception $e) {
        header('Location: /error');
    }
}

的index.php

$URL = explode("/", $_SERVER['REQUEST_URI']);
$teamName = $URL[2];
$teamExists = $db -> checkIfTeamExists($teamName);
$teamExists = (count($teamExists) > 0);
print $teamExists;exit();
if ($teamExists) {
    $teamNameUpper = ucwords(strtolower($teamName));
}
else {var_dump($teamExists);}

让我们将网址设置为localhost / team / Bulls。

在这种情况下,

$URL[2]是“公牛队”。

$teamExists = $db -> checkIfTeamExists($teamName);会将$ teamExists的值设置为数组。

接下来,$teamExists = (count($teamExists) > 0);会将$teamExists的值设置为“true”(在这种情况下,这是正确的,因为数据库中存在“公牛队”)。

以下是问题所在: 正如您在第5行所见,print $teamExists;exit();就在那里。它打印1,这是预期的结果。但是,如果我取走exit()部分并让脚本按原样运行,它只执行if-else条件的“else”部分。这必须意味着$ teamExists的值已从1更改。

我无法理解我做错了什么。价值如何变化?

1 个答案:

答案 0 :(得分:1)

要真的很挑剔我会将函数中的查询更改为“选择计数...”,然后测试以查看答案是否为> 0并返回true或false。您的主脚本将是

$URL = explode("/", $_SERVER['REQUEST_URI']);
$teamName = $URL[2];
$teamExists = $db -> checkIfTeamExists($teamName);

var_dump($teamExists);exit();
if ($teamExists) {
    $teamNameUpper = ucwords(strtolower($teamName));
}
else {var_dump($teamExists);}

我已经将打印更改为var_dump,但几乎任何非假的都应该是真的。我很想知道你从var_dump得到了什么。