在 isset 函数中定义一个变量

Defining a variable inside isset function

我试图通过尝试在 isset() 中定义一个变量来节省行数。 目前我唯一能让这项工作成功的方法是:

$setpass_accinfo = $dbconn->query("SELECT id,name,password FROM users WHERE id=" . $dbconn->real_escape_string(_GET('id')));
$setpass_accinfo_row = isset($setpass_accinfo->num_rows) ? $setpass_accinfo->fetch_assoc() : false;

所以,如果您明白我的意思,我正在尝试将这两行合并为一行。例如:

$setpass_accinfo = isset(($setpass_accinfo = $dbconn->query("SELECT id,name,password FROM users WHERE id=" . $dbconn->real_escape_string(_GET('id'))))->num_rows) ? $setpass_accinfo->fetch_assoc() : false;

问题是它给我一个关于使用 $setpass_accinfo 的错误,我不知道如何修复它,甚至不知道它是否可能。有什么想法吗?

这有时会有点混乱,但是:

$setpass_accinfo_row = !empty($setpass_accinfo = $dbconn->query("SELECT id,name,password FROM users WHERE id=" . $dbconn->real_escape_string(_GET('id')))) ? $setpass_accinfo->fetch_assoc() : false;

不能对表达式的结果使用 isset()
当您在 if 语句中使用单个等于时,$variable 被分配等于右边的值,然后在 empty() 中评估变量,在这种情况下。并且优先级决定了它是在达到三元运算之前定义的。

你可以使用这个:

$setpass_accinfo_row = $dbconn->query("SELECT ...")->fetch_assoc() ?: false;
  • $dbconn->query() returns mysqli 结果
  • $dbconn->query()->fetch_assoc()returns:
    • 与获取的行对应的关联数组
    • NULL 如果没有找到行
  • ?: 是三元运算符的缩写形式,在本例中,returns 数组或 false

请注意,它不会检查查询是否执行成功。