私はPHPの論理比較に関するドキュメントを読んでいますが、この文脈でどのようにコードが関連しているのか分かりません。私はMySQLに接続する際に問題があると思っていましたが、すべてがうまくいくことが分かり、問題なくクエリを作成できます。だから、MySQLは実際にこの記事に関連するものではありません。PHPオペランドとオペレータに関係なく、PHPの比較は常にtrue
私はこれを使用して、建設中に接続しようとしたオブジェクトのエラーを報告します。私は==、===、!=と!==を試してみると、同じ問題が発生することに注意してください。私は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()は真にしか見えないのですか?
EDIT:
は私の問題をより明確にするために、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
'mysql_ping'から' yay'を取得します。これは '$ this-> con'が実際には' FALSE'ではないことを意味します。 '$ this-> con!= FALSE'は' true' 。 – Mchl
だから何が問題なの?私があなたの投稿から理解しているように、接続は成功し、関数はリンク識別子を返します。 L.E .:マニュアルは「成功すればMySQLリンク識別子を返し、失敗した場合はFALSEを返します。だからあなたは 'if($ this-> con === FALSE)' – Catalin