【发布时间】:2017-06-13 11:13:54
【问题描述】:
我刚开始学习 php,当我尝试在我的脚本中使用 foreach 两次时遇到了这个问题,我收到了这个错误:
"注意:未定义变量:第 29 行 C:\MAMP\htdocs\blog\app\Database.php 中的 pdo 致命错误:未捕获的错误:在 C:\MAMP\htdocs\blog\app\Database.php:34 中调用 null 上的成员函数 query() 堆栈跟踪:#0 C:\MAMP\htdocs\blog\app\Table \Article.php(15): App\Database->query('\r\n SELEC...', '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): require('C:\MAMP\htdocs\... ') #3 {main} 在第 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__);
}
【问题讨论】:
-
根据报错问题在database.php文件中
-
您是否尝试过仅使用第二个 foreach 循环?我不认为你的问题是 foreach 循环它是你用来从数据库获取数据的查询。
-
似乎在第一个
foreach之后,您正在关闭连接(将其分配给null),然后在第二个foreach之后,您没有任何连接。这真的是你缩小的完整代码吗? -
您能否将
Categorie::all()方法的代码添加到您的问题中? -
另外,查看您的错误和代码,您的错误代码中有这个
query('\r\n SELEC...',这意味着您在查询的开头有和\r\n,所以请更改您的查询并删除\r\n(enter) 在开头,看看你是否得到同样的错误......