0

我正在使用带有 OOP 的 PHP 从数据库(MySQL)中选择行。

当我执行查询时,它返回一个空行。

这是我正在使用的课程:

<?php 
class EmploiManager
{
 private $_db; 

 public function __construct($db)
 {
   $this->setDb($db);
 }
 public function category($category)
 {
   $q = $this->_db->prepare('SELECT * FROM DemandeEmploi WHERE category = :category');
   $q->execute(array('category' =>$category));
   $donnees = $q->fetch(PDO::FETCH_ASSOC);
   return new Emploi($donnees);
 }

 public function setDb(PDO $db)
 {
  $this->_db = $db;
 }
} 

$type = $_GET['category'];
$manager = new EmploiManager($db);
$row = $manager->category($type);

foreach ($row as $demandeE) 
{
  ?> 
    <div class="list"><h4><a href="?id=<? echo $demandeE->id();?>&category=demandemploi"><? echo $demandeE->title();?></a></h4> </div>      
    <?php
       } 
   ?>

谁能告诉我该代码有什么问题?谢谢!

4

2 回答 2

1

这是我的错,我没有使用循环来选择所有行。

我更正了代码,现在可以正常工作了,如下所示:

public function category($category)
{
  $datas = array();

  $q = $this->_db->prepare('SELECT * FROM DemandeEmploi WHERE category = :category');
  $q->execute(array('category' =>$category));

  while ($donnees = $q->fetch(PDO::FETCH_ASSOC)) 
  {
    $datas[] = new Emploi($donnees);
  }
  return $datas;

}
于 2013-07-27T01:20:40.160 回答
0

$q->fetch()只返回一行结果。如果您想要所有结果,则必须使用$q->fetchAll().

由于您指定PDO::FETCH_ASSOC, 的元素$row将是关联数组,而不是对象;您是否收到错误说您正在尝试在非对象上调用方法?$demandeE->id()应该如此,$demandeE['id']而且$demandeE->title()应该如此$demandeE['title']

或者,您可以指定PDO::FETCH_OBJ. 然后,值将是属性,而不是方法,所以它应该是$demandeE->id$demandeE->title(没有括号)。

于 2013-07-27T00:54:38.930 回答