2014-11-24 68 views
-1

我想提取取决于多个条件从MySQL数据库的数据,但我的行为函数中使用数组中的面向对象的编程让我来提取仅基于1个条件数据。难度在PHP

请帮我修改操作函数,这样我可以使用多个阵列来提取数据。

public function query($sql, $params = array()) { 
    $this->error = false; 
    if ($this->query = $this->pdo->prepare($sql)) { 
     $x = 1; 
     if (count($params)) { 
      foreach ($params as $param) { 
       $this->query->bindValue($x, $param); 
       $x++; 
      } 
     } 
     if ($this->query->execute()) { 
      $this->results = $this->query->fetchAll(PDO::FETCH_OBJ); 
      $this->count = $this->query->rowCount(); 
     } else { 
      $this->error = true; 
     } 
    } 
    return $this; 
} 

public function action($action, $table, $where = array()) { 
    if (count($where === 3)) { 
     $operators = array('=', '>', '<', '>=', '<='); 

     $field = $where[0]; 
     $operator = $where[1]; 
     $value = $where[2]; 

     if (in_array($operator, $operators)) { 
      $sql = "{$action} FROM {$table} WHERE {$field} {$operator} ?"; 

      if (!$this->query($sql, array($value))->error()) { 
       return $this; 
      } 
     } 
    } 
    return false; 
} 

public function get($table, $where) { 
    return $this->action('SELECT *', $table, $where); 
} 
+0

这是对最坏的可能设计一个数据库抽象层,你可以拿出。 'action'?祝你好运,当你尝试使用'更新'。 – 2014-11-24 17:31:10

回答

1

在对象的定向器ORM层是常见的有一个单独的类声明,或者更具体地,为SELECT语句,例如

$users = $db->select('*') 
    ->from('users') 
    ->where('id', '>', 100) 
    ->where('name', 'like', 'agg%') 
    ->orderBy('name') 
    ->execute() 
    ->getResults(); 

这将是一个伟大的学习练习设计一个类,允许类似的东西。

+0

我是新来的OOP,可以请你帮我解释一下你答,这样我可以很容易地理解它 – aggarwal 2014-11-24 17:43:03

+0

@aggarwal:这就是所谓的[“流利接口”(http://en.wikipedia.org/wiki/Fluent_interface# PHP)。基本上,你创建一个对象并使用方法来设置它的属性。每个这样的方法返回'$ this',从而允许进一步的链接。 – georg 2014-11-24 17:45:46