2016-12-02 7 views
1

私はthis tutorial on youtubeの機能を拡張しようとしていますが、いくつかの問題があります。ここで私は、現在に苦しんでいたコードの特定のチャンクである:これは私の「プロジェクト」クラスのメソッドである私のforeachループでmysqlデータが表示されないのはなぜですか?

public function listProjects() { 
    $projects = DB::getInstance()->get('projects', array('projectStatus', '=', 'active')); 
    if($projects->count()) { 
     echo 'This query senses rows, but returns data it does not'; 
     foreach($projects as $project) { 
      echo $project->projectName; 
     } 
    } 
} 

、それはここに関連するコードと、DBクラスからメソッドを使用しています:

private function __construct() { 
    try { 
     $this->_pdo = new PDO('mysql:host=' . Config::get('mysql/host') . ';dbname=' . Config::get('mysql/db'), Config::get('mysql/username'), Config::get('mysql/password')); 
    } catch(PDOException $e){ 
     die($e->getMessage()); 
    } 
} 


public static function getInstance() { 
    if(!isset(self::$_instance)){ 
     self::$_instance = new DB(); 
    } 
    return self::$_instance; 
} 


public function query($sql, $params = array()){ 
    $this->_error = false; 
    if($this->_query = $this->_pdo->prepare($sql)) { 
     $x = 1; 
     if(count($params)) { 
      foreach($params as $param) { 
       $this->_query->bindValue($x, $param); 
       $x++; 
      } 
     } 
     if($this->_query->execute()) { 
      $this->_results = $this->_query->fetchAll(PDO::FETCH_OBJ); 
      $this->_count = $this->_query->rowCount(); 
     } else { 
      $this->_error = true; 
     } 
    } 
    return $this; 
} 


public function action($action, $table, $where = array()) { 
    if(count($where) === 3) { 
     $operators = array('=', '>', '<', '>=', '<='); 

     $field = $where[0]; 
     $operator = $where[1]; 
     $value = $where[2]; 

     if(in_array($operator, $operators)) { 
      $sql = "{$action} FROM {$table} WHERE {$field} {$operator} ?"; 
      if(!$this->query($sql, array($value))->error()) { 
       return $this; 
      } 
     } 

    } return $this; 

} 


public function get($table, $where) { 
    return $this->action('SELECT *', $table, $where); 

} 

$projectList = new Project; 
$projectList->listProjects(); 

がしようとすると、データベースに保存された私の「プロジェクト」のすべてを取得するには:

は、だから私のindex.phpの中で、私はこのコードを記述します。私は "このクエリは行を感知しますが、データは返されません"という行がカウントされているかどうかを判断するためにエコーしますが、その文はエコーされますがforeach文は正しく機能しません。私がアクセスしようとしているプロジェクトテーブルのフィールドはprojectNameです。私は最終的にすべての関連プロジェクト情報を表示したいと思いますが、データベースから何かを表示すると、それを理解できると確信しています。

+0

あなたのクラスはPDOを拡張していますか?そうすべき。また、 'get'から返されている' action'から '$ this'を返しています。配列の結果ではなく' foreach'でオブジェクトをループしようとしています。 echo文の後に '$ projects' varを' var_dump() 'してみてください。 –

+0

最初の部分が何を意味するか分かりません。このチュートリアルの目的の一部は、DB/PDO関数を抽象化して他のコードや他のアプリケーションで再利用できるようにすることでした。だから、技術的にPDOを拡張するとは思えません。最終的には配列の代わりに返すものなので、オブジェクトをループする方法はありますか? – hoolakoola

+0

'$ projects'変数に' var_dump'を試してみて、それが何であるかを見てください;)実際のデータと比べて、おそらくオブジェクトクラスのメンバ/プロパティになります。あなたのクラスをPDOから拡張した場合、 'while($ row = $ projects-> fetch(PDO :: FETCH_OBJ)){/ ** $ row ** /} 'を処理する可能性があります。そうしないと、 '$ projects - > _ pdo-> fetch()'のような基礎となるPDOオブジェクトにアクセスすることができます。 –

答えて

-2

この:

foreach($projects as $project) { 
      echo $project->projectName; 
     } 

は次のようになります。

foreach($projects as $project) { 
       echo $projects->projectName; 
      } 
+0

しかし、foreachループは$ projectsの各インスタンスのプレースホルダとして2番目の変数($ project)を返していませんか? – hoolakoola

+0

謝罪、私はこれを見て非常に疲れました、あなたは正しいです。 – dave

関連する問題