MySQLとXMLにルックアップを実行する抽象PHPクラス

私は現在、Webサイトのプライマリストレージエンジンとして使用されるライブラリを構築中です。 MySQLデータベースから情報を取得するだけですが、XMLやMSSQLなどの他のストレージシステムからデータを取得して設定するためのバリアント(同じ関数と引数を使用する)を作成したいので、再プログラミングはありませんデータベースタイプが変更された場合に必要です。さらに、SQLインジェクション攻撃を防ぐためにセキュリティを追加することもできます。

私が現時点で持っている問題は、クラスの要約です。私はさまざまなタイプのために働く方法で構造化する方法についてはわかりません(私はSQL文字列を持つことができません)。誰がどのような議論ができるのかについてのアイディアは誰にもありますか?ネストされた配列を使用して大括弧を作成し、クエリの演算子を定義することを考えていましたが、XMLを使用する場合は直接解析に使用できます。

0

2 答え

私はあなたの質問を誤解していないことを願っています(その場合、私は答えを編集または削除します)。しかし、

あなたのユースケースにもよりますが、可能であれば PDO 。それで、PDOドライバを使うだけで、PDOドライバを使うことができます。また、他のプログラマーも簡単にAPIを理解することができます。

1
追加された
私はそれをしっかりと編成しておくために、同じ議論の中で何かを使用しようとしていました。私はすでに戻り値がデータ行の配列(各行はネストされた配列として配列され、その配列ではキーは列になり、値は値である)と決めました。しかし、PDOは見た目がよく見えますが、XMLは含まれていません。その理由は、私自身がホスティングすることを強く望んでいるが、ホスティングパッケージをアップグレードするには安すぎる人々のためにウェブサイトを作成しているからです。これを迅速な回避策として使用しようとしていました。
追加された 著者 topherg,

2つのOOP継承ブランチの使用:クエリとデータの場合

class query {
    protected $row_classname = 'row';

    protected $params = array();

    protected $result;

    public function bind_param($name, $value) { ... }

    public function execute() {
        //here go some common cache issues, param checks, etc.
        $this->run_query();
    }

    public function get_result() {
        //you can map it to $this using __get and __set
        return $this->result;
    }

    abstract function run_query();
}

class sql_query extends query {
    protected $pdo_connection;

    protected $pdo_statement;

    protected function run_query() {
        $this->pdo_statement = $this->get_pdo()->prepare($this->get_statement());
        $this->pdo_statement->setFetchMode(PDO::FETCH_CLASS, $this->row_classname);
        $this->bind_params_to_pdo_statement();
        $this->pdo_statement->execute();
        $this->result = $this->pdo_statement->fetchAll();
    }
}

class select_users_by_id extends sql_query {
    protected $row_classname = 'user_row';

    protected function get_statement() {
        return 'SELECT * FROM users WHERE id = :id';
    }
}


//memcached branch
class memcached_query extends query {
    protected function run_query() {
        $this->result = new $this->row_classname;
        $results = $this->action();

        foreach($results AS $k => $v) {
            $this->result->$k = $v;
        }
    }

    abstract protected function action();
}

class get_user_by_id extends memcached_query {
    protected $row_classname = 'user_row';

    protected function action() {
        $this->get_memcached_handler()->get_by_key($this->params['key']);
    }
}

//usage in project
...
$users_by_id = new select_users_by_id();
$users_by_id->bind('id', 14);
$users_by_id->execute();

var_dump($users_by_id->get_result()->name);

...

//user_row branch
class row {
    protected $row = array();

        public function __set($name, $value) {
            $this->row[$name] = $value;
        }

        public function __get($name) {
            return $this->row[$name];
        }
}

class user_row extends row {
    ...
}
0
追加された
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com