2012-08-07 73 views
4

我一直在使用mysql_query的旧学校,现在开始使用PDO。太棒了!PDO动态查询楼

但在我老的脚本我有建立动态查询生成器,我有一个艰难的时间移植,超过使用PDO。

如果有人能给我一些方向,那就太棒了!

这里是它的理论。

  1. 我有
  2. 的DB字段和值(在插入物)的阵列。
  3. 创建查询字符串产品的有效PDO交易

这里是我想要做的部分。

public $dbFields; // This is an array of the fields plus VALUES 

public function select($where, $limit) { 
    // This is what I **had** before 
    $query = "SELECT ". implode(", ", $this->dbFields) ." FROM ". $this->table." WHERE ". $where ." ". $limit.""; 

    // Now i need to convert that to PDO 
    $this->connection->beginTransaction(); 

    # START Query 
    $select = $this->connection->prepare("SELECT {$this->fieldNames} FROM {$this->table}"); 

    // I need to BIND my params and values, but i'm not sure the best route to take when I have a WHERE clause that includes, "AND"/"OR" operators. 

    # EXECUTE the query 
    $select->execute(); 

    $this->connection->commit(); 
} 

这是我

$results = $db->select("userId = 111 OR userId = 222"); 

HAD。但我想需要做的是使用更多的东西一样

$results = $db->select(array("userId"=>111, "userId"=>222)); 

我知道这是一个高难度的顺序,我希望它对我想要做的事情有意义,但是在尝试构建这些查询方面的任何帮助都会非常赞赏iated。

回答

1

你需要一个将$params参数单独分配给您的select方法。我冒昧地为方法参数提供默认值。像@userXxxx注意到的,你不需要一个事务来做一个SELECT

<?php 

class db { 

    public $connection; //PDO 
    public $dbFields; // This is an array of the fields plus VALUES 

    public function select($where = '1', $params = array(), $limit = '', $fetchStyle = PDO::FETCH_ASSOC) { //fetchArgs, etc 
     $fields = implode(', ', $this->dbFields); 

     //create query 
     $query = "SELECT $fields FROM {$this->table} WHERE $where $limit"; 

     //prepare statement 
     $stmt = $this->connection->query($query); 

     $stmt->execute($params); 

     return $stmt->fetchAll($fetchStyle); 
    } 

    //... 
} 


$where = 'userId IN(:userId1, :userId2)'; 
$params = array(':userId1' => 111, ':userId2' => 2222); 
$db->select($where, $params); 

注:

  • 如果你真的想,你可以添加额外的方法参数用的PDOStatement::fetchAll所有灵活性相匹配。
  • 我不确定你的意思是$dbFields是“fields plus VALUES”。你可以解释吗?

[编辑]

你可能想看看为PDOStatement::execute的文档/例子,因为这似乎是在那里你的困惑的根源 - 特别是$input_parameters方法参数。

-1

这是怎么回事?

public function select($where, $limit) { 
    $query = "SELECT ". implode(", ", $this->dbFields) ." FROM ". $this->table." WHERE ". $where ." ". $limit.""; 
    $this->connection->query($query); 
} 

//Use what you had before: 
$results = $db->select("userId = 111 OR userId = 222"); 

不知道为什么要使用事务(所有有或全无的基础上或捕获异常和rollback)或准备查询(发送多个查询)...

+0

缺少返回语句? – EthanB 2012-08-28 02:59:19