mysqli查询在null上返回true

时间:2013-12-25 23:40:00

标签: php mysqli

我读到成功的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在剧本中被定义得更高。

1 个答案:

答案 0 :(得分:2)

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

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