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:这里涉及的唯一内存是数十字节的语言解析树。