sql >> Databasteknik >  >> RDS >> Mysql

SUB Dynamic Query Building

Du behöver en separat $params parameter till din select metod. Jag tog mig friheten att tillhandahålla standardinställningar för metodparametrarna. Som @userXxxx-anteckningar behöver du inte en transaktion bara för att göra en 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);

Anmärkningar:

  • Om du verkligen vill kan du lägga till ytterligare metodparametrar för att matcha all flexibilitet hos PDOStatement::fetchAll .
  • Jag är inte säker på vad du menar om $dbFields är "fält plus VÄRDEN". Kan du förklara?

[Redigera]

Du kanske vill ta en titt på dokumenten/exemplen för PDOStatement::execute , eftersom det verkade vara där din förvirring var rotad – i synnerhet $input_parameters metodparameter.



  1. Hur kan jag dekryptera en hash för lösenord i PHP?

  2. Vad är det förväntade beteendet för flera set-returnerande funktioner i SELECT-satsen?

  3. DataTable med Ajax fungerar inte bra efter användning serverSide:sant

  4. Hur kan jag ändra storleken på kolumnen i en MySQL-tabell?