【问题标题】:Assigning SQL Statement to Class Variable将 SQL 语句分配给类变量
【发布时间】:2013-07-30 14:03:45
【问题描述】:

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

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

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);我该如何解决?我必须声明一个像 $sql 这样的类变量,并且我必须将 sql 语句分配给 $sql 变量。

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

【问题讨论】:

  • 你的班级有prepared statements支持吗?
  • 现在没有了。但我会添加它。绑定值和准备现在对我来说更加复杂。在我解决了这个问题之后。我会去做的。但一步一步来。

标签: php class pdo


【解决方案1】:
$q = $db->query('SELECT * FROM table');
$results = $q->fetchAll();

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-04-02
        • 2021-02-02
        • 1970-01-01
        • 1970-01-01
        • 2017-01-07
        • 2017-03-09
        • 1970-01-01
        • 2011-06-16
        相关资源
        最近更新 更多