为什么我不能在一个页面中使用foreach两次?

时间:2017-01-27 17:22:10

标签: php mysql pdo foreach

我刚开始学习php,当我尝试在我的脚本中使用foreach两次时出现此问题我收到此错误:

  

"注意:未定义的变量:第29行的C:\ MAMP \ htdocs \ blog \ app \ Database.php中的pdo   致命错误:未捕获错误:在C:\ MAMP \ htdocs \ blog \ app \ Database.php中调用null上的成员函数query():34堆栈跟踪:#0 C:\ MAMP \ htdocs \ blog \ app \ Table \ Article.php(15):App \ Database->查询(' \ r \ n \ n \ nSELEC ...',' App \ Table \ Artic ...') #1 C:\ MAMP \ htdocs \ blog \ pages \ home.php(10):App \ Table \ Article :: getLast()#2 C:\ MAMP \ htdocs \ blog \ public \ index.php(20):要求(' C:\ MAMP \ htdocs \ ...')#3 {main}在第34行和第34行的C:\ MAMP \ htdocs \ blog \ app \ Database.php中抛出;

但是当我使用foreach一次时它工作正常。 这是我使用的代码:

<div class="row">
 <div class="col-sm-4">
   <ul>
     <?php foreach(\App\Table\Categorie::all() as $categorie): ?>
         <li><a href="<?= $categorie->getUrl(); ?>"><?= $categorie->name;?></a></li>
     <?php endforeach; ?>
  </ul>
 </div>
 <div class="col-sm-6">
    <?php foreach(\App\Table\Article::getLast() as $post): ?>

    <?php endforeach; ?>
 </div>

public static function getLast()
{
 return App::getDb()->query("
 SELECT articles.id_article, articles.nom_article, articles.object, articles.photo, category.name as categorie  
 FROM articles 
 LEFT JOIN category 
 ON category_id = category_category_id
 ", __CLASS__);
}

数据库

enter code here
public function query($statement, $class_name, $one = false)
{
    $req = $this->getPDO()->query($statement);
    $req->setFetchMode(PDO::FETCH_CLASS, $class_name);
    if($one)
    {
        $data = $req->fetch();
    }
    else 
    {
        $data = $req->fetchAll();
    }
    return $data;
}'

全部功能

private static $table = 'category';

public static function all()
{
    return App::getDb()->query("
        SELECT * 
        FROM " .self::$table ."
        ", __CLASS__);
}

1 个答案:

答案 0 :(得分:1)

好的,问题是在dataGridView方法中,您正在检查getPDO(),然后创建与数据库的连接。但是在同一个脚本中,您希望使用if($this->pdo === null){因为getPDO()不是$this->pdo而且它实际上是与数据库的连接,所以不会进入null块,所以if变量未声明。

解决方案非常简单。您只需在$pdo

中添加else部分即可

因此,在if文件中,将app\Database.php更改为:

private function getPDO()