【问题标题】:'Identical To' Comparison Operator Failing When The Same Data Type And Integer Value Are Matched - PHP当相同的数据类型和整数值匹配时,“与”比较运算符失败 - PHP
【发布时间】:2021-06-05 00:26:30
【问题描述】:

我有一个登录页面,当用户登录时,它会使用从 mySQL 数据库中获取的该用户的 id 启动会话。

$_SESSION['logged_in'] = $db_id;

在用户的个人资料页面上,可以选择更新他们的个人信息。此页面的 href 使用传递到 url 的用户名的 GET 参数

然后在配置文件编辑页面上完成数据库获取,以确保 GET url 参数 username 返回具有该用户名的人的用户 ID。

isset($_GET['username']) ? $username = $_GET['username'] : header("Location: index.php");

$stmt = $connection->prepare("SELECT * FROM users WHERE username=:username"); 
$stmt->execute([
    ':username' => $username
]); 

if ($stmt->rowCount() !== 0 ) {

    $row = $stmt->fetch();

} else {
    header("Location: index.php");
}

$db_id = htmlspecialchars($row['id']);

然后进行检查以确保 $_SESSION 值与 $db_id 值匹配。这样做是为了防止有人在 url 中输入不同的用户名,以便他们可以更改该人的详细信息。

// EXIT IF NOT LOGGED IN USER
if ($db_id != $_SESSION['logged_in'] ) { header("Location: index.php"); exit; }

上述代码的最后一部分有效,但是当我使用 !== 表示“相同”而不是 != 表示等于时,代码会失败吗?

我已经使用 gettype() 检查了这两个值:

echo gettype($_SESSION['logged_in']);
echo gettype($db_id);

两者都返回为“整数”。

!== 是相同的数值并且两个值都显示为整数数据类型时,为什么检查会失败,而!= 则不会?

【问题讨论】:

标签: php types integer comparison-operators


【解决方案1】:

htmlspecialchars() 返回一个字符串。当您比较 $db_id != $_SESSION['logged_in'] 时,$db_id 会自动转换为 int 以与 $_SESSION['logged_in'] 进行比较,这就是 !== 比较失败的原因。

gettype() 返回 $variable 的 value 的类型,而不是变量本身的类型。使用is_int()is_string() 来测试变量的类型。

【讨论】:

  • 不知道这是什么意思 gettype() 返回$变量的值的类型,而不是变量本身的类型 3v4l.org/4mLAs
  • 我想我写这篇文章的时候被孩子们分心了。现在回想起来,我承认,这没有任何意义。
猜你喜欢
  • 2010-12-16
  • 1970-01-01
  • 2017-07-17
  • 2023-04-08
  • 1970-01-01
  • 2019-10-28
  • 1970-01-01
  • 1970-01-01
  • 2022-12-09
相关资源
最近更新 更多