0

単純な PDO データベース クラスを作成していて、結果を自動的にバインドしたいのですが、どのようにすればよいかわかりません。

クラスをできるだけシンプルにしたいので、他の方法を知っていれば、このクラスをシンプルにすることができます.

これが私のデータベースクラスです:

class Database {

    private $connect;
    private $query;
    private $stmt;

    /**
    * @ Connect to the database and set PDO error mode
    */

    public function __construct() {

        try {
            $this->connect = new PDO("mysql:host=localhost;dbname=blog", "root", "root");
            $this->connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        }
        catch(PDOException $error) {
            echo "ERROR: "  . $error->getMessage();
        }

    }

    /**
    * @ Perpare the database query
    */

    public function query($query) {
        $this->stmt = $this->connect->prepare($query);

        if ($action == 'insert' || $action == 'update') {
            reset ($array);

        }

    }


    /**
    * @ Bind the results
    * 
    */

    public function bind() {


                // THIS IS WHERE I NEED HELP

    }


    /**
     * @ Execute the query
     */

    public function execute() { 
        return $this->stmt->execute();
    }

    /**
     * @ Return a set of results
     */

    public function results() { 
        $this->execute();
        return $this->stmt->fetchAll(PDO::FETCH_ASSOC);
    }

    /**
    * @ Return a single result
     */

    public function single() {
        $this->execute();
        return $this->stmt->fetch(PDO::FETCH_ASSOC);
    }

}
4

1 に答える 1

0

パラメータをバインドしたいとします。

execute()PDO には値の配列を供給する非常に便利な機能があるため、実際にそれらをバインドする必要はありません。

このクラスをもう一度見てみると、あまり意味がありません。PDOよりもメリットがないため...

生の PDO と同じワークフローを持つことができるので

$db = new PDO(...);
$stmt = $db->prepare("SELECT id FROM users WHERE email = ?");
$stmt->execute($array($email));
$row =  $stmt->fetch();

クラス データベース {

    private $connect;
    private $query;
    private $stmt;

    public function __construct() {

        $opt = array(
            PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
        );
        $dsn = "mysql:host=localhost;dbname=blog";
        $this->connect = new PDO(, "root", "root". $opt);
        $this->connect->setAttribute();

    }
    public function prepare($query) {
        return $this->connect->prepare($query);

    }
    public function execute($stmt, $params) {   
        return $stmt->execute($params);
    }
    public function single($stmt, $params) {
        $stmt->execute($params);
        return $stmt->fetch();
    }

}

次のように使用

$db = new Database();
$stmt = $db->prepare("SELECT id FROM users WHERE email = ?");
$row =  $db->single($stmt, $array($email));

于 2013-06-27T20:02:04.257 に答える