将SQL语句分配给类变量


Assigning SQL Statement to Class Variable

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

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

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>";

我想在像这样的数据库类中获得while部分

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);我该怎么修?我必须声明一个类variable,比如$sql,并且我必须将sql语句分配给$sqlvariable。

但我做不到。我该怎么做?

$q = $db->query('SELECT * FROM table');
$results = $q->fetchAll();
echo "<pre>";
print_r($results);
echo "</pre>";

最大的问题之一是在编写时

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

您需要将$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>";