繁体   English   中英

PHP MySQL查询条件oop

[英]php mysql query condition oop

我想知道如何从PHP的SelectQuery对象中为SELECT mysql查询创建通用函数。 SelectQuery扩展了Query,这意味着它继承了数据库连接,realescape方法(即mysqli_real_escape_string())和执行查询的查询方法。 除此之外,它还获得一个称为_sql的受保护变量,这是query()方法传递给数据库的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 < 18date > 5120740154条件容易实现?

另外,如果您认为我的工作方式不对,请这样说。

提前致谢

动态建立可以使用任何运算符的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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM