0

私は、fetchall クエリを簡単に実行し、foreach ステートメント内で結果を表示できるようにする「べき」クラスをいじっています。エラーがないので、すべてが正しく機能していると思います。foreach に関しては、これが問題なのでしょうか? から得られた結果をどのように foreach し$connect->query()ますか? 関数でデータベース OOP フレームワークを使用するのは初めてなので、完全に間違った方向に進んでいる可能性があります。

 <?

error_reporting(1);

class dbconnect {

private $host;
private $database;
private $username;
private $password;

private $pdo;
private $error;

    public function __construct() {

        $this->host     = "localhost";              // Host
        $this->database = "images";                 // Database Name
        $this->username = "*";              // Username
        $this->password = "*";  // Password
        $options  = array(
            PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
        );

        try {
            $this->pdo = new PDO("mysql:host={$this->host};dbname={$this->dbname};charset=utf8", $this->username, $this->password, $options);
        }
        catch(PDOException $e) {
            $this->error = $e->getMessage();
        }

    }

    public function query($query) {

        try {
            $stmt = $this->pdo->prepare($query);
            $stmt->execute(); 
        } catch(PDOException $ex) { 
            die("Failed to run query: " . $ex->getMessage()); 
        } 

        $rows = $stmt->fetchAll();
        return $rows;

    }

}

$connect = new dbconnect;
$rows = $connect->query("select * from photos");
foreach($rows as $row):
    print $row['id'];
endforeach;



?>
4

4 に答える 4

2

実際にクエリを実行していないことを確認してください。

        $this->stmt = $this->pdo->prepare($query);
        $stmt->execute(); 

$this->stmt->execute(); と言う必要があると私は信じています (私は間違っているかもしれません。

于 2013-08-23T16:49:13.173 に答える
2

$rows内部で宣言している変数は、query外部からアクセスできません。その関数に対してローカルです。returnほとんどの場合、これらの結果を呼び出し元に渡したいだけです。

$rows = $stmt->fetchAll();
return $rows; // return value from function...

呼び出し元がその戻り値を独自の変数にキャプチャするようにします。

$rows = $connect->query("select * from images"); // ... is received by caller
foreach($rows as $row):

Dougjoreの答えもチェックしてください。あなたは混合$this->stmtしており$stmt、あなたの方法の中にいますquery

于 2013-08-23T16:50:26.797 に答える
1

あなたができる

//PDO::FETCH_ASSOC: 結果セットで返される列名でインデックス付けされた配列を返します

$this->stmt = $this->pdo->prepare($query);
$this->stmt->execute();

while ($result = $this->stmt->fetch(PDO::FETCH_ASSOC))
{

  //do something with the result
}

PDO クエリ結果を取得するその他のオプションについては、こちらをご覧ください: http://php.net/manual/en/pdostatement.fetch.php

于 2013-08-23T16:50:13.463 に答える