gpt4 book ai didi

php - 将计数查询和获取查询合并为一个并让 MySQL 完成这项工作

转载 作者:行者123 更新时间:2023-11-30 00:44:06 24 4
gpt4 key购买 nike

我目前在函数返回时遇到错误验证的问题。 &我已将其范围缩小到以下行:

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

获取后,我注意到如果没有从查询中检测到数据,绑定(bind)结果将返回 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_result() 函数获取结果之前,在函数中连接两个查询并操作返回值?

最佳答案

原则上,

$Query->fetch() 应该在循环中调用,因为它原则上能够返回零行、一行或多行。通常的表达方式是

  while($Query->fetch()) {
/* process the $row */
}
$Query->close();

您的业务规则(即您的用户名列的唯一性)似乎意味着您的查询可以返回零行或一行。因此,您可以有效地做到这一点。

  if($Query->fetch()) {
/* process the user's information */
} else {
/* no such user */
}
$Query->close();

关于php - 将计数查询和获取查询合并为一个并让 MySQL 完成这项工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21532426/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com