无论操作数和运算符如何,PHP MySQL比较总是如此

时间:2012-01-16 16:20:57

标签: php mysql windows xampp boolean

为了记录,我在PHP中阅读了有关布尔比较的文档,但我不明白我的代码在这种情况下的相关性。我以为我在连接到MySQL时遇到了问题,但事实证明一切都很好,我可以毫无问题地进行查询。所以,MySQL与这篇文章并没有真正相关。

我用它来报告试图在构造上连接的对象中的错误。请注意,我尝试了==,===,!=和!==只是为了得到同样的问题。我甚至尝试将参数转换为bool和boolean。

以下代码块中的注释是相关的。

private function assert($test){ // Tried renaming in case PHP was funny about it.
    if ($test === FALSE){ // Tried ==, ===, !== and != and casting $test.
        if ($this->use_exception){
            throw new mysql_exception();
        }else{
            die("MySQL ".mysql_errno()." - ".mysql_error());
        }
    }
}

连接是典型的。

$this->con = mysql_connect($host, $un, $pw, false, $ssl ? MYSQL_CLIENT_SSL : 0);

// I get 'yay'
echo mysql_ping($this->con) ? "yay" : "nay";

// This disagrees. Tried no cast, and a cast to bool.
$this->assert((boolean)($this->con != FALSE));

mysql_ping()表示一切正常,但无论如何,assert()都会停止按下。

我尝试了每个操作符和强制转换组合,甚至通过名称冲突将函数重命名为偏执狂。为什么assert()只看到true?

修改

为了使我的问题更清楚,请考虑使用Eugen建议使用is_resource的替代实现。问题是我不知道为什么会发生以下情况。

private function assert($test){
    $test = $test ? true : false;
    if ($test === FALSE){
        echo "$test === false<br />";
    }
    if ($test == FALSE){
        echo "$test == false<br />";
    }
    if ($test !== FALSE){
        echo "$test !== false<br />";
    }
    if ($test == FALSE){
        echo "$test != false<br />";
    }
}

输出乱序,一次比较后值发生变化。由于我可以进行查询,因此$ test必须为true。我根本不应该得到输出,但我为每个操作员做。我也尝试用FALSE代替0。

错误的PHP实例?

1 !== false
=== false
!== false
!= false

2 个答案:

答案 0 :(得分:0)

$this->assert(is_resource($this->con));

答案 1 :(得分:0)

你不能使用你的第二个例子并结合这个功能吗?你已经得到一个价值(yay / nay)

$this->con = mysql_connect($host, $un, $pw, false, $ssl ? MYSQL_CLIENT_SSL : 0);
$this->assert = mysql_ping($this->con) ? 1 : 0;

大声思考