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

あなたの最大の問題の1つは、あなたが書くときです

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

おそらくあなたを悲しませているもう 1 つの問題は、$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 に答える