1

PHPのSelectQueryオブジェクトからSELECTmysqlクエリの一般的な関数を作成するにはどうすればよいのでしょうか。SelectQueryはQueryを拡張します。これは、データベース接続、realescapeメソッド(mysqli_real_escape_string())、およびクエリを実行するqueryメソッドを継承することを意味します。さらに、query()メソッドがデータベースに渡すSQLである_sqlと呼ばれる保護された変数も取得します。また、作業中のテーブルの(エスケープされた)名前を含む_tableという保護変数も取得します。

私のコード:

public function select($columns = array('*'), $known = null, $limit = null, $offset = null, $orderby = null, $asc = true) {
    if (!is_array($columns)) {
        new Error('Parameter is not an array.');
        return;
    }

    $select = '';
    foreach($columns as $column) {
        $select .= (($select != '')?', ':'') . '`' . $this->realescape($column) . '`';
    }
    $conditions = '';
    if (is_array($known)) {
        foreach($known as $column => $value) {
            $conditions .= (($conditions != '')?' AND ':'WHERE ') . '`' . $this->realescape($column) . '` = ' . ((is_string($value))?'\'':'') . $this->realescape($value) . ((is_string($value))?'\'':'');
        }
    }
    $domain = '';
    if ($limit !== null) {
        $domain = 'LIMIT ' . $this->realescape($limit);
        if ($offset !== null) {
            $domain .= ' OFFSET = ' . $this->realescape($offset);
        }
    }
    $order = '';
    if ($orderby !== null) {
        $order = 'ORDER BY `' . $this->realescape($orderby) . '` ' . (($asc)?'ASC':'DESC');
    }

    $this->_sql = 'SELECT ' . $select . ' FROM `' . $this->_table . '`';
    if ($conditions != '') {
        $this->_sql .= ' ' . $conditions;
    }
    if ($domain != '') {
        $this->_sql .= ' ' . $domain;
    }
    if ($order != '') {
        $this->_sql .= ' ' . $order;
    }
    return $this->query();
}

$ known変数が設定されている可能性があります。設定されている場合は、選択している行のすべての「既知の」要素を含む配列である必要があります。

私の質問:、、 age < 18またはなどの条件date > 5120740154を簡単に作成できるようにするには、どうすればよいですか?

また、私がこの作品を作る方法が間違っていると思うなら、そう言ってください。

前もって感謝します

4

1 に答える 1

1

任意の演算子を使用できるWHERE条件を動的に構築します

where条件を保持する$where配列を作成します。

$where = array (
    'age <' => 18,
    'date >' => 5120740154
);

次のような関数を使用して、SQLクエリに組み込むことができます。

private function buildWhereConditions($where) {
    $conditions = 'WHERE 1=1';
    /*1=1 is just so you can easily append ANDs */
    foreach ($where as $key => $value) {
        $conditions .= " AND $key $value ";
    } 
    return $conditions;
}

これにより、クエリに追加するwhere条件が返されます。

WHERE 1=1 AND age < 18 AND date > 5120740154
于 2012-11-10T01:36:03.800 に答える