我在使用PDO从数据库中获取某些PHP代码时出现问题,我想知道是否有人可以帮助我。我有一个类从数据库中获取事件并将结果返回到数组中。
代码的相关部分是:
$seminars = array();
$sql = 'select * from seminars';
$stmt = $this->dbconn->query($sql);
$stmt->setFetchMode(PDO::FETCH_INTO, new SeminarEvent);
foreach($stmt as $seminar) {
echo "<p>Seminar Row: ".var_dump($seminar)."</p>"; // Prints the unique row
$seminars[] = $seminar;
echo "<p>";var_dump($seminars);echo "</p>"; // Debug
}
(SeminarEvent是我编写的一个课程,其中包含有关getter和setter的相关字段,已包含在标题中)
我在php.net上看到的文档是$ array [] = $ elem和array_push($ array,$ elem)都将$ elem添加到数组的END中,所以我尝试使用两者和我得到了同样的结果:
对我来说问题的部分是向数组添加$ seminar正在替换整个数组中的所有值。使用array_merge时也会发生这种情况。 var_dump的输出显示数组大小增加1(如预期的那样),但每次我向数组添加项时,所有值都将替换为新插入的项。我在另一台服务器上尝试过这段代码,得到完全相同的结果。
我在这里错过了一些简单的东西吗?
编辑: 我添加了一个额外的行来打印foreach循环中的当前$研讨会,每次输出都不同所以$ seminar正确引用语句中的每一行但是$ seminars数组只包含添加到的最后一项数组。
答案 0 :(得分:0)
我认为这是因为SeminarEvent创建了一次并且由指针使用,因此每次填充相同的对象并且每次将相同的链接保存到数组时。因此,一个可能的解决方案是编写$seminars[] = clone $seminar;
而不是$seminars[] = $seminar;