Mysqli 查询在 null 上返回 true



我读到成功的sqli->query将导致一个对象,而失败的将导致一个错误。考虑到这一点,我编写了以下代码:

//first test if account is already awaiting activation
$query="SELECT * FROM activate WHERE email = '$email'";
//if it is awaitign activation....
if ( $result=$mysqli->query($query) )
{
    PrintError("Email already registered. Please check your spam folder for activation email",6);
    return;
}
//if it is not awaiting activation, test if username is alreay taken
$query = "SELECT * FROM " . user_table. " WHERE username = '$user'";
if ($result = $mysqli->query($query))
{
    PrintError("Username already registered. $result->num_rows Please select another",3);
    return;
}
现在,考虑到两个表

都是完全空的,因为这是正在创建的第一个用户,我假设两个查询都会返回 false,但相反,第一个表被查询,它返回null并且错误没有打印......但第二个查询返回 true。它实际上返回一个对象,但有 0 个条目。您会注意到我在生成的错误消息中添加了一个$result->num_rows,这给了我一个值 0 .

那么,为什么对空表的第一个查询返回 false 或 null,而对空表的第二个查询返回一个空(但存在)对象并且这满足条件?

哦,在你问之前,user_table在脚本中被定义得更高。

如果执行失败并且引发了任何错误,它将返回false。返回true表示查询已成功执行。

使用$result->num_rows查找查询结果的行数。

最新更新