Php 将SQL语句分配给类变量

Php 将SQL语句分配给类变量,php,class,pdo,Php,Class,Pdo,我声明要建立我的数据库类 这是我的数据库类的一部分 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

我声明要建立我的数据库类

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

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>";
但我知道这部分是错误的:$this->query$sql->fetchPDO::FETCH_ASSOC;我怎样才能修好它?我必须声明一个类变量,比如$sql,并且必须将sql语句分配给$sql变量

但我不能。如何才能做到这一点?

您需要将$sql参数传递给getAll方法,然后使用return返回结果。因此,该方法变为:

public function getAll($sql) {
    while($r = $this->query($sql)->fetch(PDO::FETCH_ASSOC)){
        $results[] = $r;
    }
    return $results;
}
public function getAll() {
    while($r = $this->query($sql)->fetch(PDO::FETCH_ASSOC)){
        $results[] = $r;
    }
    return $results;
}
然后在外部使用它,如:

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

你最大的问题之一是当你写作的时候

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

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

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

为了避免所有这些噪音,您可能只需要按照@YourCommonSense的建议,使用可用的PDO getAll方法


你班上有准备好的陈述支持吗?现在没有了。但我会加上它。绑定值和准备现在对我来说更复杂了。在我解决这个问题之后。我会的。但是一步一步。
$db = new Database();
$results = $db->getAll('SELECT * FROM table');
echo "<pre>";
print_r($results);
echo "</pre>";
public function getAll() {
    while($r = $this->query($sql)->fetch(PDO::FETCH_ASSOC)){
        $results[] = $r;
    }
    return $results;
}
public function getAll() {
    $stmt = $this->query($sql);
    while($r = $stmt->fetch(PDO::FETCH_ASSOC)){
        $results[] = $r;
    }
    return $results;
}
 public function getAll($sql){
      return $this->query($sql)->fetchAll(PDO::FETCH_ASSOC);
 }