为了记录,我在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
答案 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;
大声思考