调用使用PDO的类函数prepare和来自不同类的SELECT

时间:2013-10-21 10:44:16

标签: php mysql pdo

我有两个课程 - 画廊和照片。 Gallery类选择数据库ID列表并使用id创建Photo。在Gallery文件中,相关代码是

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

}

如果我像这样直接创建Photo对象,Photo代码可以工作:

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

但是当我从上面的代码中的Gallery类中尝试它时,它不起作用。当我这样尝试时,Photo类中的var_dump显示bool(false),表明SELECT语句不起作用。我无法弄清楚原因 - 欢迎提出建议。

1 个答案:

答案 0 :(得分:0)

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

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