ギャラリーと写真の 2 つのクラスがあります。Gallery クラスは、データベース ID のリストを選択し、ID を使用して写真を作成します。ギャラリー ファイルでは、関連するコードは次のとおりです。
// fetch photos in Gallery class
private function fetchPhotos() {
$this->db = mydb::getConnection();
$statement = $this->db->prepare("SELECT DISTINCT pid FROM photogallery_link WHERE gid = :id");
$statement->execute(array(':id' => $this->id));
$pids = $statement->fetchAll();
for ($i = 0; $i < count($pids); $i++) {
$p = new Photo();
$p->fetchData($pids[$i]);
$this->photos[] = $p;
echo "\$p->fetchData($pids[$i])(from Gallery):<br />";
var_dump($p);
}
}
$pids の値は正しい $id 値のようです。写真で次のコードを呼び出すために使用されます。
// fetchData() function in Photo class
public function fetchData($id) {
$this->db = mydb::getConnection();
$statement = $this->db->prepare("SELECT * FROM photos WHERE photos_id = :id");
$statement->execute(array(':id' => $id));
$this->data = $statement->fetch();
// see what's going on
echo "$this->data (from Photo, select result): <br />\n";
var_dump ($this->data);
// fill the fields
$this->setId($this->data['id']);;
$this->setUrl($this->data['url']);
$this->setCaption($this->data['caption']);
$this->setDescription($this->data['description']);
$this->setFilename((pathinfo($this->url, PATHINFO_FILENAME)));
$this->setExt((pathinfo($this->url, PATHINFO_EXTENSION)));
$this->setPath(str_replace("." . $this->ext, "", $this->url));
}
次のように Photo オブジェクトを直接作成すると、Photo コードが機能します。
$p = new Photo();
$p->fetchData(4);
$p->printThumbLink(3);
しかし、上記のコードのように Gallery クラスから試してもうまくいきません。その方法で試してみると、Photo クラスの var_dump に bool(false) が表示され、SELECT ステートメントが機能していないことが示されます。理由がわかりません - 提案を歓迎します。