合并计数查询&将查询提取到一个&让MySQL完成工作

时间:2014-02-03 16:24:31

标签: php mysql sql mysqli

我目前遇到了函数返回时出现错误验证的问题。 &安培;我把它缩小到以下几行:

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()函数获取结果之前操作返回值?

1 个答案:

答案 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();