2016-07-29 10 views
0

「Article」というテーブルを持つMySQLデータベースからオブジェクトをフェッチしたい。 getLatestArticle()関数は以下の通りである:PHP PDO fetchObject() - idメンバ以外のデフォルト値のみを含むオブジェクト

public function getLatestArticle($priority){ 
    $query = "select * from article where priority = :priority having date = max(date);"; 
    $STH = $this->dbLink->prepare($query); 
    $STH->bindParam(':priority', $priority); 

    if(!$STH->execute()){ 
     print_r($STH->errorInfo()); 
    }else{ 
     return $STH->fetchObject('Article'); 
    } 
} 

が適切なクラスを含めた、と同じMySQLではクラス変数、コンストラクタのパラメータとカラム名の名前を持つことは、この生成します。

object(Article)#6 (8) { ["id":"Article":private]=> string(2) "13" ["title":"Article":private]=> string(0) "" ["subTitle":"Article":private]=> string(0) "" ["imgFilePath":"Article":private]=> string(0) "" ["contentFilePath":"Article":private]=> string(0) "" ["author":"Article":private]=> string(0) "" ["date":"Article":private]=> string(0) "" ["priority":"Article":private]=> string(0) "" } 

私が手フィールド 'id'のみが正しいのに対し、他のすべてのオブジェクトはデフォルト値を使用しています。 setFetchMode(PDO :: FETCH_OBJ、 'Article')を使用し、fetch()を使用して、setFetchMode(PDO :: FETCH_CLASS、 'Article)を使用し、fetch()を不運に使ってみました。条において すべてのクラス変数がプライベートとして指定され、コンストラクタはそうのように提示されています

public function __construct($title="", $subTitle="", $imgFilePath="", $contentFilePath="", $author="", $date="", $priority = ""){ 
    $this->title = $title; 
    $this->subTitle = $subTitle; 
    $this->imgFilePath = $imgFilePath; 
    $this->contentFilePath = $contentFilePath; 
    $this->author = $author; 
    $this->date = $date; 
    $this->priority = $priority; 
} 

が、私はコンストラクタでデフォルト値を削除し、国民に民間からクラスメンバーを変更してみました、欠落している引数のエラーが発生します。

fetchObject( 'Article')で取得したオブジェクトは、idフィールドのみが正しい値で終わるのはなぜですか?他のフィールドはすべてデフォルト値を使用しますか?

EDITは:、すべてのフィールドが正しく埋めなければならない連想配列を取得、言及を忘れていますが、質問2で始まるので、私は、私が質問1スキップします

答えて

0

はfetchObject()でそれを行うしたいと思います1つの質問で十分です。あなたはすべてのコードを表示するわけではないので、私は推測する必要があります。

PHPマニュアルには、と記載されています。「オブジェクトがフェッチされると、そのプロパティはそれぞれの列の値から割り当てられ、その後にそのコンストラクタが呼び出されます。。だから、あなたのコンストラクタがあるとき:

class Article 
{ 
    public function __construct($title="", $subTitle="", $imgFilePath="", 
           $contentFilePath="", $author="", 
           $date="", $priority = "") { 
    $this->title = $title; 
    $this->subTitle = $subTitle; 
    $this->imgFilePath = $imgFilePath; 
    $this->contentFilePath = $contentFilePath; 
    $this->author = $author; 
    $this->date = $date; 
    $this->priority = $priority; 
    } 
} 

コンストラクタがPDOStatement::fetchObjectで取得された列の値を上書きします。

それを正しく行うには、この使用します。私はこのことができます願ってい

class Article 
{ 
    private $title = ''; 
    private $subTitle = ''; 
    private $imgFilePath = ''; 
    private $contentFilePath = ''; 
    private $author = ''; 
    private $date = ''; 
    private $priority = ''; 

    public function __construct() { 
    // do whatever you need, but do not overwrite the column values 
    } 
} 

を。 '列の値'を設定する必要がある場合は、クラス内のセッターを使用できます。

+0

すぐにお返事ありがとうございます:) –

関連する問題