我读到成功的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
在剧本中被定义得更高。
答案 0 :(得分:2)
如果执行失败并且引发了任何错误,它将返回false
。返回true
表示查询已成功执行。
使用$result->num_rows
查找查询结果的行数。