0

我说要建立我的数据库类。

这是我的数据库类的一部分。

public function query($sql)
{
   return $this->getPdo()->query($sql);
}

我的班级正在工作,但我想改进它。

这是类的外部部分:

$db = new Database();
$q = $db->query('SELECT * FROM table');

while($r = $q->fetch(PDO::FETCH_ASSOC)){
    $results[] = $r;
}

echo "<pre>";
print_r($results);
echo "</pre>";

我想在数据库类中得到一部分,比如

public function query($sql)
{
   return $this->getPdo()->query($sql);
}

public function getAll() {
    while($r = $this->query($sql)->fetch(PDO::FETCH_ASSOC)){
        $results[] = $r;
    }
    return $results;
}

但我知道这部分是错误的: $this->query($sql)->fetch(PDO::FETCH_ASSOC); 我该如何解决?我必须声明一个像 $sql 这样的类变量,并且我必须将 sql 语句分配给 $sql 变量。

但我做不到。我怎样才能做到这一点 ?

4

3 回答 3

1
$q = $db->query('SELECT * FROM table');
$results = $q->fetchAll();

echo "<pre>";
print_r($results);
echo "</pre>";
于 2013-07-30T14:10:52.433 回答
0

你最大的问题之一是当你写

public function getAll() {
    while($r = $this->query($sql)->fetch(PDO::FETCH_ASSOC)){
        $results[] = $r;
    }
    return $results;
}

您正在使数据库在循环的每次迭代中运行查询。

要更正定义的代码,只需在循环外运行查询,然后使用 fetch 作为循环条件:

public function getAll() {
    $stmt = $this->query($sql);
    while($r = $stmt->fetch(PDO::FETCH_ASSOC)){
        $results[] = $r;
    }
    return $results;
}

另一个可能让您感到悲伤的问题是 $sql 值似乎是凭空而来的。您应该将它传递给您的 getAll 函数以访问它。

为了避免所有这些噪音,您可能只想遵循@YourCommonSense 的建议并使用可用的 PDO getAll 方法。

 public function getAll($sql){
      return $this->query($sql)->fetchAll(PDO::FETCH_ASSOC);
 }
于 2013-07-30T14:38:58.297 回答
-2

您需要将$sql参数传递给您的getAll()方法,然后用于return获取结果。所以这个方法变成了:

public function getAll($sql) {
    while($r = $this->query($sql)->fetch(PDO::FETCH_ASSOC)){
        $results[] = $r;
    }
    return $results;
}

然后你在外部使用它,如:

$db = new Database();
$results = $db->getAll('SELECT * FROM table');
echo "<pre>";
print_r($results);
echo "</pre>";
于 2013-07-30T14:11:33.310 回答