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

时间:2015-07-26 05:43:07

标签: 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);
    }
}

当我打印它时,我得到以下内容(对于每个属性):

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] => )

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

foreach ($resultBySQL as $row) { /* Extract the info */ }

但是现在,通过这个例子......它不起作用。

另一方面,我已经检查了数据库和PDO连接中的查询,它们的运行没有问题。

有什么问题?你有什么想法吗?

2 个答案:

答案 0 :(得分:4)

当你这样做时:

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

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

您应该使用:

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

    //...
}

每次迭代只获取一行,然后您可以在while循环中访问其内容

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

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

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

    //...
} 

答案 1 :(得分:0)

在这种情况下,请尝试使用fetch代替fetchAll