gpt4 book ai didi

无论操作数和运算符如何,PHP MySQL 比较始终为真

转载 作者:行者123 更新时间:2023-11-30 23:34:21 24 4
gpt4 key购买 nike

作为记录,我阅读了有关 PHP 中 boolean 比较的文档,但我不明白我的代码在这种情况下是如何关联的。我以为我在连接 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 必须为真。我根本不应该得到输出,但我会为每个运算符(operator)做。我也试过用 0 替换 FALSE。

错误的 PHP 实例?

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

最佳答案

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

关于无论操作数和运算符如何,PHP MySQL 比较始终为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8882932/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com