Mysql
 sql >> Base de données >  >> RDS >> Mysql

Création de requête dynamique PDO

Vous aurez besoin d'un $params séparé paramètre à votre select méthode. J'ai pris la liberté de fournir des valeurs par défaut pour les paramètres de la méthode. Comme les notes @userXxxx, vous n'avez pas besoin d'une transaction juste pour faire un 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);

Remarques :

  • Si vous le souhaitez vraiment, vous pouvez ajouter des paramètres de méthode supplémentaires pour correspondre à toute la flexibilité de PDOStatement::fetchAll .
  • Je ne suis pas sûr de ce que vous voulez dire par $dbFields étant "champs plus VALEURS". Pouvez-vous expliquer ?

[Modifier]

Vous voudrez peut-être jeter un œil aux docs/exemples pour PDOStatement ::execute , car cela semblait être là où votre confusion était enracinée - en particulier, les $input_parameters paramètre de méthode.