遇到PDO查询问题(注意:未定义的索引)

Jav*_*ñoz 1 php pdo

我是PHP世界的新手,在这里我需要一些帮助。

我正在尝试从数据库中提取数据,我正在使用PDO来做到这一点。

我有以下PHP代码未成功:

public function CheckIdentity($email, $password) {
    $usersArray = [];

    $SQL = " SELECT * FROM usuario WHERE email='".$email."' AND password='".$password."' ";
    $resultBySQL = $this->dbConnected->query($SQL);

    while ($row = $resultBySQL->fetchAll(PDO::FETCH_ASSOC)) {
        //$row = $resultBySQL->fetchAll(PDO::FETCH_ASSOC);
        $user = new User();
        $user->setUsername($row['username']);
        $user->setEmail($row['email']);
        $user->setPassword($row['password']);
        $user->setRole($row['role']);
        $user->setPersonalInfo($row['personal_info']);
        print_r($user);

        array_push($usersArray, $user);
    }
}
Run Code Online (Sandbox Code Playgroud)

当我打印它时,我得到以下信息(针对每个属性):

Notice: Undefined index: email等等等等...

另外,当我只申请 $row = $resultBySQL->fetchAll(PDO::FETCH_ASSOC);

我总是得到这个:

User Object ( [username:User:private] => [email:User:private] => [password:User:private] => [role:User:private] => [personalInfo:User:private] => )
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我试图在效果良好的地方应用代码:

foreach ($resultBySQL as $row) { /* Extract the info */ }
Run Code Online (Sandbox Code Playgroud)

但是现在,通过此示例...它不起作用。

另一方面,我已经检查了数据库和PDO连接中的查询,它们可以正常工作。

怎么了?你有什么主意吗?

Mop*_*ppo 5

当您这样做时:

$row = $resultBySQL->fetchAll(PDO::FETCH_ASSOC);
Run Code Online (Sandbox Code Playgroud)

您一次获取所有结果,就得到了一个数组数组。由于您是在while条件下进行此调用的,因此您要在第一个迭代中创建整个结果的数组,然后在第二个迭代中退出代码,因为没有其他要提取的内容,因为所有结果都已被提取在第一次迭代中。

您应该使用:

//notice the 'fetch' in place of 'fetchAll'
while ( $row = $resultBySQL->fetch(PDO::FETCH_ASSOC); ) 
{
    $user = new User();
    $user->setUsername($row['username']);

    //...
}
Run Code Online (Sandbox Code Playgroud)

每次迭代仅获取一行,那么您可以在while循环内访问其内容

或者,您可以一次提取所有行,然后循环遍历结果:

$rows = $resultBySQL->fetchAll(PDO::FETCH_ASSOC);

foreach( $rows as $row )
{
    $user = new User();
    $user->setUsername($row['username']);

    //...
} 
Run Code Online (Sandbox Code Playgroud)