2012-10-09 4 views
-3

мне удается изменить код, который я скопированный из учебникаPHP PDO OOP показать нужные данные только

public function viewItem(){ 

    self::conn(); 
    try { 
     $sql = "SELECT * FROM dbo.guitar WHERE id=:id"; 
     $q = self::$db->prepare($sql); 
     $q->execute(array(':id' => $this->id)); 
     $row = $q->rowCount(); 
     if ($row == 0) 
     { 
      echo 'no records found.'; 
     } 
     else 
     { 
      $results = $q->fetchAll(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, 
      "Guitar", 
      array('id', 'make', 'model', 'colour', 'price')); 
     } 
    }catch (Exception $e){ 
     print "Error!: " . $e->getMessage(); 
    } 
    return $results;  
} 

Я принесенных все данные, в соответствии с Id, моя проблема в том, что если я хочу, чтобы цвет, чтобы показать, вместо того, чтобы все ,

+2

Что вы подразумеваете под «хотите, чтобы цвет отображался вместо всего»? – Marcus

+0

Он хочет получить значение поля цвета вместо того, чтобы печатать все поля при возврате $ results. – Mattis

+0

:) так жаль, что не ясна. Сэр Маттис прав. – user1693411

ответ

0

изменить эти две строки в коде

$sql = "SELECT `colour` FROM dbo.guitar WHERE id=:id"; 

и

array('colour') 
1

Это вернет только цвета:

public function viewItem(){ 

    self::conn(); 
    try { 
     $retVal = array(); 
     $sql = "SELECT * FROM dbo.guitar WHERE id=:id"; 
     $q = self::$db->prepare($sql); 
     $q->execute(array(':id' => $this->id)); 
     $row = $q->rowCount(); 
     if ($row == 0) 
     { 
      echo 'no records found.'; 
     } 
     else 
     { 
      $results = $q->fetchAll(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE,"Guitar", 

      foreach($result as $row) 
       $retVal[] = $row['colour']; 
     } 
    }catch (Exception $e){ 
     print "Error!: " . $e->getMessage(); 
    } 
    return $retVal;  
} 
+0

Я вижу свет, но я хочу показать свои поля из другого документа. Это работает для меня, но оно показывает все поля. 'code' $ guitar = new Guitar ($ id," "," "," "," "); $ items = $ guitar-> viewItem(); 'code' print_r ($ items); – user1693411

+0

Я понятия не имею, что вы пытаетесь сказать. Что вы хотите достичь? Попытайтесь быть немного более конкретным, что такое «другой документ»? Отредактировал код, чтобы вернуть все цвета. Помогает ли это? – Marcus

+0

Я использовал для вызова класса. Похоже на это: 'foreach ($ result as $ row) $ retVal [] = $ row ['color'];' – user1693411

0

Ответ достаточно простое:

public function viewItem(array $fields = array('id', 'make', 'model', 'colour', 'price')) 
{ 
    self::conn(); 
    try { 
     $sql = "SELECT ".implode(',',$fields)." FROM dbo.guitar WHERE id=:id"; 
     $q = self::$db->prepare($sql); 
     $q->execute(array(':id' => $this->id)); 
     $row = $q->rowCount(); 
     if ($row == 0) 
     { 
      echo 'no records found.'; 
     } 
     else 
     { 
      $results = $q->fetchAll(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, 
      "Guitar",$fields); 
     } 
    }catch (Exception $e){ 
     print "Error!: " . $e->getMessage(); 
    } 
    return $results;  
} 

Этот метод принимает аргумент массива или вообще никаких аргументов. Пройдите array('colour'), и вы будете запрашивать только данные colour. При переходе никаких аргументов не извлекаются все данные, тогда как array('id', 'make', 'model') выбирает id, make и model.

Это решение, возможно, немного грубо и может поэтому сделать с некоторой дополнительной работой, но это должно помочь вам на вашем пути.

+0

так я называю свой класс getAll '$ guitars = Guitar :: getAll(); foreach ($ гитары как $ guitar) {$ color = $ guitar-> getColour(); $ maker = $ guitar-> getMake(); $ id = $ guitar-> id(); 'Это то, что я хотел сделать с моим классом viewItem. – user1693411

Смежные вопросы