PHP/MYSQL循环只迭代一次,无法在数组中存储数据

PHP/MYSQL循环只迭代一次,无法在数组中存储数据,php,mysql,sql,arrays,Php,Mysql,Sql,Arrays,我有下面的一段代码,它连接两个表,然后返回users表中所有作为教师的用户 对于有资格成为教师的用户,将从教师表中检索信息 因此,假设有3个用户符合users表中的教师资格,那么所有3个具有这些信息的用户都应该存储在一个数组中 当页面加载时,数组变空 SQL语句 //IF my reasoning is correct the folllowing sql query should select alll users who qualifies as teachers $sql = "SELEC

我有下面的一段代码,它连接两个表,然后返回
users
表中所有作为教师的用户

对于有资格成为教师的用户,将从
教师
表中检索信息

因此,假设有3个用户符合
users
表中的教师资格,那么所有3个具有这些信息的用户都应该存储在一个数组中

当页面加载时,数组变空

SQL语句

//IF my reasoning is correct the folllowing sql query should select alll users who qualifies as teachers
$sql = "SELECT users.*, teachers.*
        FROM users INNER JOIN teachers ON teachers.userID = users.userID";
功能

public function showAllTeachers()
    {
        $db = DB::getInstance();
        $sql = "SELECT users.*, teachers.*
        FROM users INNER JOIN teachers ON teachers.userID = users.userID";

        //simple DB QUERY
        $stmnt = $db->prepare($sql);
        $stmnt->execute();
        $teachers = $stmnt->fetchAll();
        $teacherInfo = array();

        //Check if there are any users who qualifies as teachers else return fals
        if ($stmnt->rowCount() > 0) {
            foreach($teachers as $teacher){
          //Store all teacher info in array $teacherInfo
          //There are more than 1 teacher so loop shouldl iterate more than once

                $teacherInfo = array('name' =>$teacher['firstname'], 'headline' =>$teacher['headline'], 'location' => $teacher['location'],
                    'age' => $teacher['age'], 'experience' => $teacher['experience'], 'imgPath' => $teacher['imgPath']);
            }//foreach

            //return array with teacher info
            return $teacherInfo;
        }//rowcount
        else {
            return false; //no teachers
                }
    }//function
由于有1个以上的用户符合教师资格,
$teacherInfo
现在应该包含所有这些教师的数据

清空数组

加载页面时将运行以下命令,并应显示所有教师

我的问题 清空数组
$allTeachers
时,我只返回一个结果(teacher)。因此,出于某种原因,我的循环只迭代一次

 $teachers = new TeacherSearch();
           $allTeachers = $teachers->showAllTeachers();
            if(is_array($allTeachers)){
                foreach($allTeachers as $key => $teacher){
                    echo $key;
                    echo $teacher;
                    echo '<br />';
                }
              }
$teachers=新教师搜索();
$allTeachers=$teachers->showAllTeachers();
if(is_数组($allTeachers)){
foreach($key=>$teacher的所有教师){
echo$key;
老师;
回声“
”; } }
非常感谢您的帮助

其他信息

数据库

教师表

用户表

用户表数据


循环只执行一次似乎不是问题,在循环中添加
echo'test'
,您将看到它被执行多次(当然,只要
$teachers
有多个元素)

问题是您在每个
foreach
循环执行上覆盖了
$teacherInfo
,而不是向其追加新数组

替换:

$teacherInfo = array('name' =>$teacher['firstname'], 'headline' =>$teacher['headline'], 'location' => $teacher['location'],
    'age' => $teacher['age'], 'experience' => $teacher['experience'], 'imgPath' => $teacher['imgPath']);
与:

$teacherInfo[] = array('name' =>$teacher['firstname'], 'headline' =>$teacher['headline'], 'location' => $teacher['location'],
    'age' => $teacher['age'], 'experience' => $teacher['experience'], 'imgPath' => $teacher['imgPath']);

循环只执行一次似乎不是问题,在循环中添加
echo'test'
,您将看到它被执行多次(当然,只要
$teachers
有多个元素)

问题是您在每个
foreach
循环执行上覆盖了
$teacherInfo
,而不是向其追加新数组

替换:

$teacherInfo = array('name' =>$teacher['firstname'], 'headline' =>$teacher['headline'], 'location' => $teacher['location'],
    'age' => $teacher['age'], 'experience' => $teacher['experience'], 'imgPath' => $teacher['imgPath']);
与:

$teacherInfo[] = array('name' =>$teacher['firstname'], 'headline' =>$teacher['headline'], 'location' => $teacher['location'],
    'age' => $teacher['age'], 'experience' => $teacher['experience'], 'imgPath' => $teacher['imgPath']);

$teacherInfo=array(…)@PierreGranger实际上,
$teacherInfo=array()在循环之外,因此
$teacherInfo
只初始化一次(这是所需的行为)。问题在于语句
$teacherInfo=array('name'…
)中
$teacherInfo
后面缺少括号,该语句覆盖变量而不是向其追加数组。我指的是循环中的一个,$teacherInfo=array('name'…),不是循环前的一个。对,我想我误解了你的评论,很抱歉。$teacherInfo=array(…)@PierreGranger实际上,
$teacherInfo=array();
在循环之外,因此
$teacherInfo
只初始化一次(这是所需的行为)。问题源于语句
$teacherInfo=array('name'…
)中
$teacherInfo
后面缺少括号,该语句覆盖变量而不是向其追加数组。我指的是循环中的一个,$teacherInfo=array('name'…),不是循环之前的那个。对,我想我误解了你的评论,对此很抱歉。谢谢你的回答,我现在遇到的问题是,在添加建议的
[]
括号时,我得到了一个
数组到字符串的转换错误
。错误发生在这里
$allTeachers=$teachers->showAllTeachers()
当我执行
打印时,它会显示具有所有正确值的数组`但是当我尝试使用
$allTeachers
循环时,我遇到上述错误
数组到字符串转换错误
来自您的
echo$teacher;
在第二个脚本中。
$teacher
是一个数组,您需要对其进行内爆或循环浏览。感谢您的回答,我现在遇到的问题是,在添加建议的
[]
括号时,我遇到了一个
数组到字符串转换错误
。错误发生在这里
$allTeachers=$teachers->showAllTeachers()
当我执行
打印时,它会显示具有所有正确值的数组`但是当我尝试使用
$allTeachers
循环时,我遇到上述错误
数组到字符串转换错误
来自您的
echo$teacher;
在第二个脚本中。
$teacher
是一个数组,您需要对其进行内爆或循环通过它。