我是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连接中的查询,它们的运行没有问题。
有什么问题?你有什么想法吗?
答案 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
。