简体   繁体   English

使用类中的准备语句选择多行

[英]Select Multiple Rows using Prepared Statements in A Class

I am relatively new to PHP and I am having difficulty with getting the correct output from a class.我对 PHP 比较陌生,我很难从类中获取正确的输出。 I am using SELECT * in a prepared statement in an attemp to pull back a row WHERE login status is set to in. Thge code I have at present creates an array, but if more than one user is logged in, the second result appears to be written over the first, only allowing me to display one row.我在准备好的语句中使用 SELECT * 试图拉回一行,其中登录状态设置为 in。我目前拥有的代码创建了一个数组,但如果有多个用户登录,则第二个结果似乎是写在第一个,只允许我显示一行。

Normally I would achieve such a task with a 2d array, where each row is an array containing an array of key-value pairs, but I am having difficulty getting this to work.通常我会用一个二维数组来完成这样的任务,其中每一行都是一个包含键值对数组的数组,但我很难让它工作。

The method is as follows:方法如下:

public function getUserByLoginStatus($loginStatus) {
    $session=new mysqli(self::SERVERNAME,self::USERNAME,self::DBPASS);
    mysqli_select_db($session,"users");
    $statement=$session->prepare("SELECT * FROM `logins` WHERE `loginstatus`= ? ;");
    $statement->bind_param('s', $this->loginStatus);
    $statement->execute();
    $statement->store_result();
    $statement->bind_result($userId,$userHandle,$eMail,$password,$gender,
                            $loginStatus,$currentSess,$currentIpv4,$currentIpv6,
                            $lastActivity,$lastLoginDate,$lastLoginTime);
    $numberOfRows=$statement->num_rows;
    if($numberOfRows < 1)
        {
            $errorMessage="No users currently online";
            $statement->close();
            $session->close();
            return $errorMessage;
        }
    else 
        {
            while($statement->fetch())
                {
                    $returnArr=['userid' => $userId, 'userhandle' => $userHandle, 'email' => $eMail,
                    'password' => $password, 'gender' => $gender, 'loginstatus' => $loginStatus,
                    'currentsess' => $currentSess, 'currentipv4' => $currentIpv4, 'currentipv6' => $currentIpv6,
                    'lastactivity' => $lastActivity, 'lastlogindate' => $lastLoginDate, 'lastlogintime' => $lastLoginTime];
                }                 
            $statement->close();
            $session->close();
            return $returnArr;    
        }
}

If the table col is set to 'out' or 'deactivated', the correct error message is displayed.如果表 col 设置为“out”或“deactivated”,则会显示正确的错误消息。 If any 1 user is set to 'in' I can view data from the fields.如果任何 1 个用户设置为“in”,我可以查看字段中的数据。 If >1 user is online, only the last user displays (overwritten I believe).如果 >1 个用户在线,则只显示最后一个用户(我相信会被覆盖)。

Here is how I am trying to print this out at present:这是我目前尝试打印出来的方法:

Creating an instance, attempting to output data.创建实例,尝试输出数据。 创建实例,尝试输出数据。

Try following while loop尝试跟随 while 循环

while($statement->fetch())
{
    $returnArr[]=['userid' => $userId, 'userhandle' => $userHandle, 'email' => $eMail, 'password' => $password, 'gender' => $gender, 'loginstatus' => $loginStatus, 'currentsess' => $currentSess, 'currentipv4' => $currentIpv4, 'currentipv6' => $currentIpv6, 'lastactivity' => $lastActivity, 'lastlogindate' => $lastLoginDate, 'lastlogintime' => $lastLoginTime];
} 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM