我是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连接中的查询,它们可以正常工作。
怎么了?你有什么主意吗?
当您这样做时:
$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)