Mysql
 sql >> Database >  >> RDS >> Mysql

Costruzione di query dinamiche PDO

Avrai bisogno di un $params separato parametro al tuo select metodo. Mi sono preso la libertà di fornire i valori predefiniti per i parametri del metodo. Come le note di @userXxxx, non hai bisogno di una transazione solo per fare 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);

Note:

  • Se proprio lo desideri, puoi aggiungere parametri di metodo aggiuntivi per abbinare tutta la flessibilità di PDOStatement::fetchAll .
  • Non so cosa intendi con $dbFields essendo "campi più VALORI". Puoi spiegare?

[Modifica]

Potresti voler dare un'occhiata a docs/examples per PDOStatement::execute , dal momento che sembrava essere lì che la tua confusione era radicata, in particolare, i $input_parameters parametro del metodo.