我目前遇到了函数返回时出现错误验证的问题。 &安培;我把它缩小到以下几行:
if ($User_ID === null){
return false;
}
现在,我正在使用MySQLi执行一些查询;
$Query = $this->_Database->prepare("SELECT ID,Username,Password,Salt,UserStatus FROM users WHERE Username=?");
$Query->bind_param('s',$Username);
$Query->execute();
$Query->bind_result($User_ID,$Username,$User_Password,$User_Salt,$User_Status);
$Query->fetch();
$Query->close();
在获取之后,我注意到如果没有从查询中检测到数据,绑定结果将返回null而不是实际数据,但问题是有时由于某些原因这不能正常工作,因为它允许访问成员区域因为某些类型的验证从代码中看错了,我猜测它是return
语句的假或数组。因此,要调整性能并希望尝试删除NULL
检查。
我目前实施的标准程序如下:
$User_Chk = $this->_Database->prepare("SELECT COUNT(ID) FROM users WHERE `username`=?");
$User_Chk->bind_param('s',$Username);
$User_Chk->execute();
$User_Chk->bind_result($Count);
$User_Chk->fetch();
$User_Chk->close();
if ($User_Chk === 1){
$Query = $this->_Database->prepare("SELECT ID,Username,Password,Salt,UserStatus FROM users WHERE Username=?");
$Query->bind_param('s',$Username);
$Query->execute();
$Query->bind_result($User_ID,$Username,$User_Password,$User_Salt,$User_Status);
$Query->fetch();
$Query->close();
return array(
"UserID" => $User_ID,
"Username" => $Username,
"Password" => $User_Password,
"Salt" => $User_Salt,
"Status" => $User_Status
);
}
return false;
但是..因为我总是遵循规则让MySQL在PHP必须操作之前完成工作..坦率地说,我不是那么精明的MySQL查询/关键字..那么,是否有任何内置在函数中加入两个查询&在PHP使用bind_result()
函数获取结果之前操作返回值?
答案 0 :(得分:0)
$Query->fetch()
应该在循环中调用,因为它原则上能够返回零行,一行或多行。通常的表达方式是
while($Query->fetch()) {
/* process the $row */
}
$Query->close();
您的业务规则(即username
列的唯一性)似乎意味着您的查询可以返回零行或一行。所以,你可以有效地做到这一点。
if($Query->fetch()) {
/* process the user's information */
} else {
/* no such user */
}
$Query->close();