爲了記錄,我閱讀了關於PHP中布爾比較的文檔,但我不明白我的代碼在這種情況下如何相關。我想我連接到MySQL時遇到了問題,但事實證明一切正常,我可以毫無問題地進行查詢。所以,MySQL與這篇文章並不相關。無論操作數和操作符如何,PHP 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()只能看到真實?
編輯:
爲了使我的問題更清晰,考慮替代實現與尤金的建議使用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必須是真的。我不應該得到輸出,但我爲每個操作員都做。我也試過用FALSE替換爲0.
錯誤的PHP實例?
1 !== false
=== false
!== false
!= false
你在路過的$測試? – MrGlass 2012-01-16 16:26:37
你從'mysql_ping'獲得'yay',這意味着'$ this-> con'實際上不是'FALSE',這意味着'$ this-> con!= FALSE'應該評估爲'true'就像它一樣。 – Mchl 2012-01-16 16:27:28
有什麼問題?據我的理解,你的帖子,連接是成功的,該函數返回一個鏈接標識符,因爲它應該總是會聲明爲真.. L.E .:手冊中說:「成功時返回MySQL鏈接標識符或失敗時返回FALSE。所以我想你應該測試'if($ this-> con === FALSE)' – Catalin 2012-01-16 16:27:49