我试图通过尝试在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
的错误,我不知道如何解决它或者它是否可能。有什么想法吗?
答案 0 :(得分:2)
有时可能会有点混乱,但是:
$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;
Connot在表达式的结果上使用isset()
当你在if语句中使用单个相等时,$ variable被赋予相等右边的值,然后在empty()
中计算变量。优先权决定了它是在达到三元运算之前定义的。
答案 1 :(得分:1)
您可以使用:
$setpass_accinfo_row = $dbconn->query("SELECT ...")->fetch_assoc() ?: false;
$dbconn->query()
返回mysqli结果$dbconn->query()->fetch_assoc()
返回:
NULL
?:
是三元运算符的缩写形式,在这种情况下,返回数组或false
请注意,它不会检查查询是否成功执行。