-1

我有两门课——画廊和照片。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 值。它们用于在 Photo 中调用以下代码:

// 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));

}

如果我像这样直接创建一个照片对象,照片代码就可以工作:

$p = new Photo();
$p->fetchData(4);
$p->printThumbLink(3);

但是当我像上面的代码一样从 Gallery 类中尝试它时它不起作用。当我以这种方式尝试时,Photo 类中的 var_dump 显示 bool(false),表明 SELECT 语句不起作用。我不知道为什么 - 欢迎提出建议。

4

1 回答 1

0

绝对没有区别,你在哪里创建你的类 - 在一个函数内,或在一个全局范围内,或其他类的方法中。甚至没有变量范围问题(只要您没有在其他地方使用新创建的对象)。

所以,你的问题出在其他地方。您必须调试代码以找出出错的地方以及为什么类创建没有得到正确的数据。

于 2013-10-21T11:38:26.240 回答