PHP OOP查询未执行

时间:2013-07-27 00:46:30

标签: php mysql oop

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

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

这是我正在使用的classe:

<?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
       } 
   ?>

任何人都可以告诉我这段代码有什么问题吗? 谢谢!

2 个答案:

答案 0 :(得分: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;

}

答案 1 :(得分:0)

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

由于您指定了PDO::FETCH_ASSOC,因此$row的元素将是关联数组,而不是对象;是不是你得到错误,说你试图在非对象上调用方法?因此$demandeE->id()应为$demandeE['id'],而$demandeE->title()应为$demandeE['title']

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