Вернуть более одного результата MySQL в классе PHP - PullRequest
0 голосов
/ 05 марта 2011

Я пытаюсь создать свою собственную CMS в классах.Теперь у меня возникла проблема при попытке получить данные из базы данных MySQL.Вместо одного предмета я хотел бы получить коллекцию всех своих предметов

В конце я хотел бы получить объект, чтобы я мог прочитать его так:1004 * Вот мой код:

static function getContentItems($id, $active, $sort_by, $sort_type, $limit) {
    if (isset($id) && !empty($id)) {
        $where .= "WHERE id = ".$id;
    }
    if (isset($active) && !empty($active)) {
        $where .= " AND active = ".$active;
    }
    if (isset($sort_by) && !empty($sort_by)) {
        $where .= " ORDER BY ".$sort_by;

        if (isset($sort_type) && !empty($sort_type)) {
            $where .= " ".$sort_type;
        }
    }
    if (isset($limit) && !empty($limit)) {
        $where .= " LIMIT 0,".$limit;
    }

    if (isset($where) && !empty($where)) {
        $query = "SELECT * FROM content ".$where;   
    } else {
        $query = "SELECT * FROM content";
    }
    $result = mysql_query($query)or die(mysql_error());

    $item = new ContentItem();
    while ($data = mysql_fetch_array($result)) { 
        $item->id = $data['id'];
    }   
    return $item;
}

}

Ответы [ 3 ]

1 голос
/ 05 марта 2011

не начинайте строку $ where с .

if (isset($id) && !empty($id)) {
        $where = "WHERE id = ".$id;
    }

и alwez распечатайте свой $query

Лучшее решение

if (!empty($id) {
        $where = " WHERE id = ".$id;
   if (!empty($active)) {
          $where .= " AND active = ".$active;
     if (!empty($sort_by)) {
          $where .= " ORDER BY ".$sort_by;
        if (!empty($sort_type)) {
            $where .= " ".$sort_type;
        }
    }
  }
}
if (empty($limit)) {
        $where .= " LIMIT 0,".$limit;
}

и позже

$item = new ContentItem();       
$data = array(); $i=0;
while ($data = mysql_fetch_object($result)) {                
         $search_result[$i] = $data;
         $i++;
    }   
 return $search_result;

и любой идентификатор можно получить по $search_result[$i]->id

0 голосов
/ 05 марта 2011

Изучите использование mysql_fetch_object http://php.net/manual/en/function.mysql-fetch-object.php вместо mysql_fetch_array .. он возвращает строки БД как объект уже

0 голосов
/ 05 марта 2011

Почему вы не используете массивы?

Например:

$collection = array();
while ($data = mysql_fetch_array($result)) {
    $item = new ContentItem();
    $item->id = $data['id'];
    $collection[] = $item;     //Appends the item to the array
}
return $collection;

Вы можете получить доступ к вашему массиву следующим образом:

$collection = YourClassName::getContentItems(...);
foreach($collection as $item) {
    // do something with each $item
    print_r($item);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...