Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Construção de Consulta Dinâmica PDO


Você precisará de um $params separado parâmetro para o seu select método. Tomei a liberdade de fornecer padrões para os parâmetros do método. Como as notas do @userXxxx, você não precisa de uma transação apenas para fazer um 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);

Notas:
  • Se você realmente quiser, pode adicionar parâmetros de método adicionais para combinar com toda a flexibilidade de PDOStatement::fetchAll .
  • Não entendi o que você quer dizer com $dbFields sendo "campos mais VALORES". Você pode explicar?

[Editar]

Você pode querer dar uma olhada nos documentos/exemplos para PDOStatement::execute , já que parecia ser aí que sua confusão estava enraizada - em particular, o $input_parameters parâmetro do método.