Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 合并计数查询&;将查询提取到一个&;让MySQL来做这项工作_Php_Mysql_Sql_Mysqli - Fatal编程技术网

Php 合并计数查询&;将查询提取到一个&;让MySQL来做这项工作

Php 合并计数查询&;将查询提取到一个&;让MySQL来做这项工作,php,mysql,sql,mysqli,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',$Usern

我目前遇到了一个问题,返回函数时会出现错误验证我把范围缩小到以下几行:

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
语句不是false就是数组。因此,要调整性能并尝试删除
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\u result()
函数获取结果之前,是否有任何内置函数连接这两个查询并操纵返回

$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();

您在查询中的
用户名
/
用户名
大小写不同…@plantheidea很好,也许这有时会返回true并获取所需的行,有时则不返回?很抱歉延迟答复。使用循环遍历结果集将浪费内存(我知道是micro,但仍然如此),因为只获取一行为什么会浪费内存?它只会迭代一次。您使用的是php:这里涉及的唯一内存是数十字节的语言解析树。